The following shows how to implement a bareyear field that contains just the year with no additional brackets and can be used in \citeyear as well as a bareauthor field.
First, we have to make biblatex aware of our new fields via a datamodel file (save the following as barefields.dbx and locate it somewhere it can be found by LaTeX)
\ProvidesFile{barefields.dbx}[2014/04/02 allow for bracket-less fields]
\RequireBiber[3]
\DeclareDatamodelFields[type=field,datatype=literal]{bareyear}
\DeclareDatamodelEntryfields{bareyear}
\DeclareDatamodelFields[type=list,datatype=name]{bareauthor}
\DeclareDatamodelEntryfields{bareauthor}
\endinput
We simply define a literal field bareyear that is valid for all entry types, as well as a name list bareauthor.
We populate the fields via
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=year,
match=\regexp{\A\[(.+)\]\z},
final]
\step[fieldset=bareyear, fieldvalue={$1}]
\step[fieldset=sortyear, fieldvalue={$1}]
}
\map[overwrite]{
\step[fieldsource=author, match=\regexp{\[(.+)\]}, final]
\step[fieldset=bareauthor, origfieldval]
\step[fieldsource=bareauthor, match=\regexp{\[(.+)\]}, replace=\regexp{$1}]
}
}
}
just in the same manner as described by PLK in Ordering references with bracketed years in biblatex 2.7. (The second part might be more buggy and break in some situations, the year thing should work fine though.)
What remains is to make \citeyear use bareyear and \citeauthorfullname use bareauthor if available
\DeclareCiteCommand{\citeyear}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\iffieldundef{bareyear}
{\printfield{year}}
{\printfield{bareyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citeauthorfullname}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\DeclareNameAlias{labelname}{first-last}%
\usebibmacro{prenote}}
{\ifnameundef{bareauthor}
{\printnames{labelname}}
{\printnames{bareauthor}}}
{\multicitedelim}
{\usebibmacro{postnote}}
You will notice that this will always print the author even if the labelname is actually set to the editor, but I think you will have to live with that. (I could not access labelname in the sourcemapping process because [presumably] at that point biblatex is not yet sure which name field to take as the labelname. Just an idea: You could create bareauthor and bareeditor fields and list them before the author and editor fields in the \DeclareLabelname command, thus biblatex would prefer the bare... versions to the "normal" names - then there would be no need to modify the cite commands.)
MWE
\documentclass{article}
\usepackage[style = authoryear,datamodel=barefields]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=year,
match=\regexp{\A\[(.+)\]\z},
final]
\step[fieldset=bareyear, fieldvalue={$1}]
\step[fieldset=sortyear, fieldvalue={$1}]
}
\map[overwrite]{
\step[fieldsource=author, match=\regexp{\[(.+)\]}, final]
\step[fieldset=bareauthor, origfieldval]
\step[fieldsource=bareauthor, match=\regexp{\[(.+)\]}, replace=\regexp{$1}]
}
}
}
\DeclareCiteCommand{\citeauthorfullname}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\DeclareNameAlias{labelname}{first-last}%
\usebibmacro{prenote}}
{\ifnameundef{bareauthor}
{\printnames{labelname}}
{\printnames{bareauthor}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\citeyear}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\iffieldundef{bareyear}
{\printfield{year}}
{\printfield{bareyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{lennon1969,
author = {J[ohn] Lennon},
title = {Some work from 69 -- maybe Summer of},
year = {1969},
}
@book{lennon1970,
author = {J[ohn] Lennon},
title = {This book was released with my Imagine album},
year = {[1970]},
}
@book{lennon1971,
author = {J[ohn] Lennon},
title = {This is from 71},
year = {1971},
}
@book{lennon1972,
author = {John Lennon},
title = {This Really is by John Lennon},
year = {1972},
}
\end{filecontents*}
\begin{filecontents*}{barefields.dbx}
\ProvidesFile{barefields.dbx}[2014/04/02 allow for bracket-less fields]
\RequireBiber[3]
\DeclareDatamodelFields[type=field,datatype=literal]{bareyear}
\DeclareDatamodelEntryfields{bareyear}
\DeclareDatamodelFields[type=list,datatype=name]{bareauthor}
\DeclareDatamodelEntryfields{bareauthor}
\endinput
\end{filecontents*}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
As \citeauthorfullname{lennon1970} wrote in \citeyear{lennon1970} \ldots\ and in \citeyear{lennon1972}.
\printbibliography
\end{document}

1971etc. in the bib entry and use appropriate bib macros to format the list of references appropriately? (Rather than trying to take that stuff out in the text.) Apart from anything else, your current approach is inflexible - it is hard to change the style of the bibliography because you need to rewrite the bib entries. – cfr Apr 01 '14 at 20:39sortnameandsortyearfields (in which, of course you give the year/name without brackets) and print those in\citeauthorfullnameand\citeyear? Another approach (that is probably not applicable to names or more complex situations) is to input all data normally but add a flagguessedyearwhich causesbiblatexto wrap the guessed year into brackets in the bibliography (this could be extended to other fields as well, it will fail forLennon, J[ohn]and other partial insertions, though). – moewe Apr 02 '14 at 08:24sortyearfield for entries with a guessed year anyway; as it stands now they are sorted before all the other works by the same author. But printing thesortyearmight have adverse effect - after all thesortyearmight contains something like1970-1or worse things that one would not want to see in the document itself, the same goes forsortname. We could of course define a new fieldbareyearthat gets the year without brackets and the like (it could even be populated via Biber's sourcemapping). – moewe Apr 02 '14 at 08:32bareyearfield for example. – moewe Apr 02 '14 at 11:14bareyearthat takes the year without brackets (while you would add brackets to theyearfield if need be) that could be used for in-text\citeyear. (In fact, you would not even have to populate that field yourself, just use the fix you linked to above) I hesitate to answer (with a MWE) though because I realise that this fix is only applicable to a specific field (yearfor example), one would have to create a newbare...field of each field one needs this functionality for. – moewe Apr 02 '14 at 11:39\citeyearrefer to the fieldsortyearinstead? As I understood the solution to the question I link to, everything in the fieldyearis copied intosortyearanyway, with possible brackets removed. – Sverre Apr 02 '14 at 11:41sortyearmight contain more than just the year. Inbiblatex-examples.bib, for example,knuth:ct:a'ssortyearis1984-1. You would not want to have that printed. So you would have to restrict your (correct) usage of thesortyearfield – moewe Apr 02 '14 at 11:45\citeyeartosortyear. It's at least better than what I have now ... – Sverre Apr 02 '14 at 11:50years (and very easy cases of other fields). It will not be applicable to all the fields where you might supplement information in brackets, or only with heavy work. – moewe Apr 02 '14 at 11:56authorandyear(i.e.sortyearin our case) where it is relevant now, since only\citeauthor(or my workaround\citeauthorfullname) and\citeyearexist as cite commands. – Sverre Apr 02 '14 at 12:01sortyearinformation from withinbiblatex. So your best bet is abareyearfield. – moewe Apr 02 '14 at 12:07