1997年に生まれていないユーザは誰ですか?SQLでYEARのNOT IN文を書く方法
SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB IN YEAR(1997);
私は間違っていますか?私はuserDOB推測している
1997年に生まれていないユーザは誰ですか?SQLでYEARのNOT IN文を書く方法
SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB IN YEAR(1997);
私は間違っていますか?私はuserDOB推測している
は日である
SELECT userFname, userLname, userDOB
FROM user
WHERE YEAR(userDOB) NOT IN (1997);
SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) NOT IN (1997, 1998);
が、価値があるだけの場合はINは必要ないが、それ以外の場合は
SELECT userFname, userLname, userDOB
FROM user
WHERE year(userDOB) <> 1997;
@JamesDangもし私の答えが正しければそれをマークしてください...どういうわけかここにあります http://meta.stackexchange.com/questions/5234/how - 返事を受け入れる – scaisEdge
YEAR(yourDate)
は、yourDate
の年のみを返します。
その後、1997に生まれていないすべてののユーザーを見つけるために、単に
SELECT userFname, userLname, userDOB
FROM user
WHERE YEAR(userDOB) <> 1997
私の純粋主義者の一部がYEAR
機能を使用し、現在の答えに反対されています。どうして?関数を使用すると条件がインデックスを無視するため、その理由があります。
ので、それから、答えは範囲を作成する機能を使用するために、通常は次のとおりです。
SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB >= CAST('1997-01-01' AS DATE)
AND userDOB < CAST('1998-01-01' AS DATE)
を...あなたが実際に逆にしたい除いて、それでは、条件を切り替えてみましょう:
SELECT userFname, userLname, userDOB
FROM user
WHERE userDOB < CAST('1997-01-01' AS DATE)
OR userDOB >= CAST('1998-01-01' AS DATE)
...この時点で私の純粋主義はそれほど重要ではありません。どうして?選択される可能性のある行のパーセンテージと、同じインデックスにある可能性の低いデータ(Check the third point here)があるためです。
[userDOB]値のいずれかが空であるか、NULLであるか、それ以外の日付/時刻データ型ではありませんか?そのようなものに対応する必要があるかもしれません。また、私はYEAR(userDOB)で構文を使用します!= 1997 – codemaker