来月の誕生日リストを表示したい。
生年月日はbirthday
列に保存されます。これを表示するにはどうすればよいですか?
私の推奨する解決策は、インデックスを作成できる追加の列を用意することです。next_birthday
.
夜間のプロセスとして、その列を更新して、値が常に将来のものであることを確認します。
これにより、次のようなクエリが可能になります。
SELECT
myfriends.*
FROM
user AS myself
INNER JOIN
user AS myfriends
ON myfriends.next_birthday >= myself.next_birthday
AND myfriends.next_birthday < DATEADD(MONTH, 1, myself.next_birthday)
これにより、日時フィールドの一部が保持されるため、非常
にうまくyear
対処
でき
ます。年)これと闘う going around the corner
2012-12-15
フィールドはインデックス化できるため、このソリューションではテーブル内のすべてのレコードをスキャンする必要はありません。
ただし、そのメンテナンス ジョブを実行してフィールドを更新できることを前提としています。ジョブが実行されていない場合、データの一部が古くなっています。
また、誕生日がオンになっている人にも注意する必要があり29th Feb
ます。誕生日に 1 年足し続けることはできません。29th Feb + 1 year
に移り28th feb
、何年足しても元に戻ることはありません29th Feb
。でもそこまで辛くない…
UPDATE
user
SET
next_birthday = DATEADD(YEAR, DATEDIFF(YEAR, birthday, GETDATE()) + 1, birthday)
WHERE
next_birthday < GETDATE()
これもすべて、範囲が非常に狭いです。1 つの非常に特定のニーズのために、新しい列と新しいメンテナンス ジョブが導入されます。次に、質問をする必要があります。これらのコストは、代替クエリ(テーブル スキャンなどを必要とすることが多い)よりも望ましいですか?
Select birthdaycolumn from yourtable where MONTH(birthdaycolumn) = MONTH(GETDATE())
これを試してみてください
これを試してください
Select *
from yourDataTable
where MONTH(birthdaycolumn) = (MONTH(GETDATE() + 1))
次のようなものを試してください。
SELECT BirthDay
FROM TableName
WHERE DATEPART(m, BirthDay) = UpcomingMonth
このSQLクエリのパラメータとしてUpcomingMonthを使用します。お役に立てれば。
その問題を解決しました。
select * from Employee
where convert(nvarchar,convert(datetime,convert(nvarchar,YEAR(GETDATE()))+'.'+convert(nvarchar,MONTH(Birthday))+'.'+convert(nvarchar,DAY(Birthday))),102) between convert(nvarchar,getdate(),102) and convert(nvarchar,DATEADD(D,14 ,GETDATE()),102)