1

ユーザーの生年月日を取得し、年を現在の年に変更するクエリを作成しました (実際の生年月日を表示したくない)

CAST(
  CAST(YEAR(GETDATE()) as varchar) + '-' +
  CAST(MONTH(BirthDay) as varchar) + '-' +
  CAST(DAY(BirthDay) as varchar) 
as date)

テーブルに対してそれを実行すると、次のエラーが発生します。

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

SQLFiddleでクエリを正しく動作させることができました

クエリのトラブルシューティングを行うために、各CAST()関数を段階的に実行しましたが、それぞれが個別に機能します。に変更GETDATE()するBirthDayと、クエリは正しく機能しますが、これは を使用するのが好きではありませんGETDATE()。関数が実行され、約 400 レコードを処理した後、上記のエラー メッセージが返されます。

この問題の原因となっている実際の記録を見つける方法はありますか、または日付の月と日を取得して 2013 にするより良い方法はありますか?

4

1 に答える 1

3

うるう年が問題だと思います。誕生日の値の 1 つは、うるう年の 2 月 29 日です。2013 年 2 月 29 日がないため、エラーが発生します。

この仮説を検証するには:

  • CAST(YEAR(GETDATE()) as varchar)ハードコードされた文字列に置き換えるとどうなります'2013'か?
  • '2012'閏年に置き換えてみたらどうですか?
  • または、Niels Keurentjes がコメントで賢く示唆しているように、データをクエリして、2 月 29 日の誕生日があるかどうかを確認します。select * from Users where month(BirthDay) = 2 and day(BirthDay) = 29
于 2013-05-17T17:10:01.557 に答える