"Had better" is an English
idiom (or perhaps some new kind of
verb) expressing what is
preferable or
advisable or a weak
obligation. It is similar in force to "
should" and "
ought to", and less strong than the obligation expressed by "
must" and "
have to". It has a number of quirky properties.
For one, the "had" is completely omissible, so that there seems to be no finite verb: the equivalent with just "better" is clearly grammatical, not just a phonetic slurring-over of the verb. So the following are all roughly synonymous:
You had better go now.
You'd better go now.
You better go now.
You should go now.
You ought to go now.
There are naturally subtle differences in force between these, depending on the choice of
modal and on where the
focus or stress lies. If you have an appointment somewhere else, and don't really want to keep it, it is nevertheless incumbent on you to go, and we might prefer "should" or "ought", but if it's for your own good to go we might prefer "better". This might be because of a sort of implicit threat, if you've done something wrong.
Next note that the verb following it is infinitive: we say "you had better be sure", not "*you had better been/are sure". So it differs from the usual auxiliary uses of "have", to form perfect and pluperfect when followed by the past participle: "you have gone", "you had gone", "you had been". It also differs from the strong obligatory modal "have to", a near-synonym of "must": "you had to go". We can't say "*you had go" or "*you had be" to mean anything at all, but just by inserting the adverb "better" (if that's what it is), the verb sequence becomes grammatical. Also, the following verb stays infinitive even when the "had" is omitted: "you better be sure". This is remarkable for not having any finite (inflected) verb.
Another peculiarity is that it's only ever past "had", never "have". We can't say "*you have better go" regardless of what time it's referring to. This also means you can't make a past tense of it: if yesterday it was advisable but today it no longer matters, you can't show that the "had" is actually past.
Superficially it looks like an auxiliary verb plus an adverb, followed by the main verb phrase, and as such it should work similarly to "would rather": you had better go now, I would rather go now. But most auxiliaries simply invert with their subject to form a question, but "had better" sounds quite strange doing this, though probably not completely ungrammatical:
You would rather go now. Would you rather go now?
You had gone by then. Had you gone by then?
You had better go now. ??Had you better go now?
Non-auxiliary verbs can't invert, but take
do-support, the verb "do" being inserted as inverted auxiliary. Surprisingly perhaps, the modal "have to" behaves like a non-modal in this respect. However, "had better" definitely can't take do-support.
You went yesterday. Did you go yesterday?
You had to go yesterday. Did you have to go yesterday?
You had better go now. *Do you have/had better go now?
Negative statements are formed by suffixing "not" or "n't" to auxiliaries, and using do-support on normal verbs. This is ungrammatical (or at least highly suspect) on "had better" and "would rather". (Be careful to read the following as plain statements of fact; I'll get to negative questions afterwards.)
You would go today. You wouldn't go today.
You went today. You didn't go today.
You had to go today. You didn't have to go today.
You would rather go today. *?You wouldn't rather go today.
You had better go today. *?You hadn't better go today.
So I've demonstrated that "had better" can't be turned into a
question or a
negative in the simple ways we might expect if it was an auxiliary. In fact the negative question does work as expected, and is what we also use instead of a positive question:
You had better go now. Hadn't you better go now?
You better go now. Hadn't you better go now?
A negative statement is formed by putting the "not" in the
verb phrase, and this is also how "would rather" works:
You would rather go today. You would rather not go today.
You had better go today. You had better not go today.
There is a certain ambiguity here. The "not" can negate either the activity in the verb phrase, "go today", or it can negate the controlling preference. With some
modals you get a choice: if you want to avoid attending a party, you could say "We could not go", and this is different from the inability "We couldn't go". Now you can say "I would rather not go than go", meaning you would rather choose not-going, but if you have no preference and want to say "*I wouldn't rather either go or not-go", there doesn't seem to be a way "would rather" can give you that. Likewise in "You had better not go rather than go", the modal "had better" has
scope over the negative, and there isn't a grammatical way of giving "not"/"n't" the higher scope": "*You hadn't better either not go or go".
I have said that the auxiliary-type construction is ungrammatical for a negative statement, but the inverted form works for negative questions. In fact the uninverted statement-type negative also works (imperfectly) for implicit questions:
You had better go today.
*You hadn't better go today.
?You hadn't better go today?
?Do you think you hadn't better go today?
This works perfectly for "would rather", by the way: "You wouldn't rather go today?" is a standard way of asking it. Now I said at the top that "had" was omissible, but this is only possible in positive statements or in statements when the negation is down in the verb phrase:
You better go today.
*Youn't better go today.
*You not better go today.
*You bettern't go today.
You better not go today.
*Better you go today?
*Better you not go today?
*?Better not you go today?
Now with all this uncertainty you're bound to get some
dialect variation, and frankly I don't want any /msg's saying what you can say in Belfast or Atlanta, because this is
confusing enough already. Culicover (1999) cites an example of Washington D.C. dialect allowing "You better hadn't go" (though not "*You better had go"). He also goes into discussion of different degrees of
acceptability of full "had" versus reduced "'d" versus zero, but as I disagree with numerous of his judgements, I'd better leave that as an exercise to the reader. This is the sort of tangled irregularity that makes the task of explaining language acquisition so hard, and why I'm despairing at what on earth my dissertation will make of it.
In many of these constructions you can also say "best" for better, with much the same sense; but if you go through each of them you'll probably find differences in acceptability. There are other expressions of similar meaning and construction, "had rather", "had liefer", "had as soon", "had as well", "had as lief", but none now in colloquial use.
The origin of this expression is that the "had" is subjunctive, equivalent to "would have". If you imagine a couple of dummy elements added, "You would have (it) better (to) go" is about the same as "You had better go". Formerly in Middle English a dative subject and a subjunctive of "be" were used instead: "Me were better go", i.e. It were better for me to go.
Culicover, P., 1999, Syntactic Nuts, Oxford