2011-07-11 9 views
0

shouldにはyyyymmdd dateformatの値が実際に入っているchar(8)フィールドがあります。 を考えると、私はそれは、これはとてもとしてクエリのように実行することができることを私のために重要です(var)charが有効なISO日付であるかどうかを確認する方法(012)

SELECT id, isValidDate(datestring) FROM my_hypothetical_table 

ような何かをできるようにしたいと思います(架空の)テーブルid(int)|datestring(char(8))(私でし、SELECT * from othertable INNER JOIN hypothetical_table on hypothetical_table.id = othertable.hypothetical_FK WHERE isValidDate(hypothetical_table.datestring) = 1、例えば)。キャッチエラーは実行可能に見えません。

IsDate()関数は、スラッシュで区切られた日付でのみ動作し、yyyymmdd形式では機能しません。

+2

あなたはISDATEは()のみスラッシュで区切られた日付と連動し、地球上だと思いますなぜ?なぜあなたはCHAR(8)の列に日付を格納していますか? –

+0

yyyymmddは、SQL Serverの唯一の安全な日付形式です。 2つの答えにコメントを読む:http://stackoverflow.com/q/1138142/27535 – gbn

+0

私は間違いなくすべてのexmplesがhttp://msdn.microsoft.com/en-us/library/ms187347 v = SQL.100).aspx形式を使用します。あなたのm/d/yを注文する方法を示す – Martijn

答えて

5

YYYYMMDD形式で動作します。

これは、出力生成実行
DECLARE @MyTable TABLE (id INT, datestring CHAR(8)) 
INSERT INTO @MyTable VALUES (1, '20110711') 
INSERT INTO @MyTable VALUES (2, '2011') 
INSERT INTO @MyTable VALUES (3, '20110228') 
INSERT INTO @MyTable VALUES (4, '20110229') 
INSERT INTO @MyTable VALUES (5, '2011071') 
INSERT INTO @MyTable VALUES (6, '201107') 
SELECT id, datestring, ISDATE(datestring) AS IsDate FROM @MyTable 

id   datestring IsDate 
----------- ---------- ----------- 
1   20110711 1 
2   2011  1 
3   20110228 1 
4   20110229 0 
5   2011071 0 
6   201107  1 
5

ISDATEは()あなたがすべての値の長さは8桁の数字であることについて不明な点がある場合は、長さのチェックを追加したいことがありすぎて

SELECT ISDATE('20010101') 
関連する問題