DOB
フリーテキスト(生年月日)の値を有効な日付データ型に変換する際に問題が発生します。SQL Server2008R2を使用しています。
以下はその例です。
フリーテキストの日付値01/28/48
がSQLの変換関数を使用して変換されている場合、将来の年では2048
なく年として表示され1948
、この生年月日列では使用できません。
誰かが私がこの問題から抜け出すのを手伝ってくれる?
以下は、クイックリファレンスとして添付したスクリーンショットです。
DOB
フリーテキスト(生年月日)の値を有効な日付データ型に変換する際に問題が発生します。SQL Server2008R2を使用しています。
以下はその例です。
フリーテキストの日付値01/28/48
がSQLの変換関数を使用して変換されている場合、将来の年では2048
なく年として表示され1948
、この生年月日列では使用できません。
誰かが私がこの問題から抜け出すのを手伝ってくれる?
以下は、クイックリファレンスとして添付したスクリーンショットです。
デフォルトでは、SQL Serverは2049年のカットオフ年に基づいて2桁の年を解釈します。つまり、2桁の年49は2049として解釈され、2桁の年50は1950として解釈されます。 Automationオブジェクトに基づいて、2030年のカットオフ年を使用します。SQLServerは、SQL Serverが使用するカットオフ年を変更し、日付の一貫した処理を可能にする2桁の年カットオフ構成オプションを提供します。4桁の年を指定することをお勧めします。
これを再構成するには、次のようにします。
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'two digit year cutoff', 2030 ;
GO
RECONFIGURE;
GO
詳細については、次のドキュメントを参照してください。
個人的にはサーバーを再構成しません。データの年数が4桁であることを確認するか、 2桁にする必要がある場合は、これらは常に生年月日であるため、日付が将来の場合は100年を削除します。
DECLARE @dob DATE
SET @dob = CONVERT(DATE, '01/28/48')
IF @dob > GETDATE()
BEGIN
SET @dob = DATEADD(yy, -100, @dob)
END
これは、SQLServerのシステム全体の設定である「2桁の年のカットオフ」です。
このようにあなたのためにそれが何であるかを確認してください:
sp_configure 'show advanced options', 1
reconfigure
sp_configure 'two digit year cutoff'
私の場合、2049
-の値を取得します。その1年前の日付は1年と見なされ20xx
(たとえば48
-> )、1年後の日付は(-> )2048
として解釈されます。19xx
70
1970
したがって、この設定を変更するか、このケースを自分で処理するカスタムT-SQL関数を作成する必要があります(19xx
システムのカットオフ日に関係なく、常に日付を日付に変換します)
2桁の年のカットオフを設定する方法については、このブログ投稿でこのトピックの詳細を参照してください。