1

DOBフリーテキスト(生年月日)の値を有効な日付データ型に変換する際に問題が発生します。SQL Server2008R2を使用しています。

以下はその例です。

フリーテキストの日付値01/28/48がSQLの変換関数を使用して変換されている場合、将来の年では2048なく年として表示され1948、この生年月日列では使用できません。

誰かが私がこの問題から抜け出すのを手伝ってくれる?

以下は、クイックリファレンスとして添付したスクリーンショットです。

ここに画像の説明を入力してください

4

2 に答える 2

3

CASTおよびCONVERTのドキュメントから引用:

デフォルトでは、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

詳細については、次のドキュメントを参照してください。

2桁の年のカットオフサーバー構成オプションを構成します


個人的にはサーバーを再構成しません。データの年数が4桁であることを確認するか、 2にする必要がある場合は、これらは常に生年月日であるため、日付が将来の場合は100年を削除します。

DECLARE @dob DATE
SET @dob = CONVERT(DATE, '01/28/48')
IF @dob > GETDATE()
BEGIN
   SET @dob = DATEADD(yy, -100, @dob)
END
于 2013-02-19T09:31:45.627 に答える
2

これは、SQLServerのシステム全体の設定である「2桁の年のカットオフ」です。

このようにあなたのためにそれが何であるかを確認してください:

sp_configure 'show advanced options', 1
reconfigure

sp_configure 'two digit year cutoff'

私の場合、2049-の値を取得します。その1年前の日付は1年と見なされ20xx(たとえば48-> )、1年後の日付は(-> )2048として解釈されます。19xx701970

したがって、この設定を変更するか、このケースを自分で処理するカスタムT-SQL関数を作成する必要があります(19xxシステムのカットオフ日に関係なく、常に日付を日付に変換します)

2桁の年のカットオフを設定する方法については、このブログ投稿でこのトピックの詳細を参照してください。

于 2013-02-19T09:32:09.920 に答える