2012-09-04 21 views

答えて

16
SET DATEFORMAT MDY; 
SELECT CASE WHEN ISDATE(@string) = 1 
    AND @string LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' 
    THEN 1 ELSE 0 END; 

結果が1の場合、有効な日付ですが、ユーザーが意図した日付であるという保証はありません。彼らは入力した場合:

06/07/2012 

を、彼らは6月7日または7月6日を意味している場合あなたの最善の策は、あなたが形式を制御することを可能にする、ユーザーがドロップダウンまたはカレンダーコントロールから日付を選ぶようにすることです知る方法はありません不必要な解釈を避けてください。アプリケーション層では、厳密に型指定された変数/パラメータを使用して、適切に型付けされた列に挿入できます。

+2

+1 - 日付/時刻は絶対に**文字列型として保存するのではなく、適切な型として保存するべきです。データベースが何を使用しているのか把握しようとしているなら、何か問題があるかもしれません。 –

+0

@ X-Zeroありがとうございました。 –

3

あなたはそれがMDYだかどうかを確認するために、SQL ServerのDATEFORMAT後にしている場合は、使用します。

dbcc useroptions 

、あなたが外でそれをしなければならないDATEFORMAT SETオプション

+0

+1 - あなたはそれを変更する方法を知っていますか? –

0

を見てデータベース。データベースは内部的にdatetimeを独自の形式で格納します。私はあなたが日付が格納されている形式を読むことができるとは思わない。あなたはそれがあなたの好きな方法で、例えばdd/mm/yyyyやyyyy/mm/ddなど読むことができる。

これをチェックする任意の日付フィールドのデータベース外の値。そのために正規表現を使用することができます。しかし、それはデータベースの外にあります。

2

あなたが他の、検証する必要はありません2012

09/08/2012 

9月8日のような出力がされますCONVERT function

select convert(varchar(10),getdate(),101) 

を使用して、この形式MM/DD/YYYYで日付ストリングを日付に変換日付フィールドをチェックするのがNULLであるかどうかを確認してください。

関連する問題