-4

来月の誕生日リストを表示したい。

生年月日はbirthday列に保存されます。これを表示するにはどうすればよいですか?

4

5 に答える 5

3

私の推奨する解決策は、インデックスを作成できる追加の列を用意することです。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 つの非常に特定のニーズのために、新しい列と新しいメンテナンス ジョブが導入されます。次に、質問をする必要があります。これらのコストは、代替クエリ(テーブル スキャンなどを必要とすることが多い)よりも望ましいですか?

于 2012-06-11T08:50:01.373 に答える
2
Select birthdaycolumn from yourtable where MONTH(birthdaycolumn) = MONTH(GETDATE()) 

これを試してみてください

于 2012-06-11T07:03:47.857 に答える
2

これを試してください

Select * 
from yourDataTable
where MONTH(birthdaycolumn) = (MONTH(GETDATE() + 1)) 
于 2012-06-11T07:32:21.693 に答える
1

次のようなものを試してください。

SELECT BirthDay 
FROM TableName
WHERE DATEPART(m, BirthDay) = UpcomingMonth 

このSQLクエリのパラメータとしてUpcomingMonthを使用します。お役に立てれば。

于 2012-06-11T07:00:26.657 に答える
0

その問題を解決しました。

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)
于 2012-06-19T08:48:59.527 に答える