3

さて、私はSQLにテーブルがあり、日付を含む日付列が含まれており、うるう年の無効な日付、つまりうるう年以外の2月31日または2月29日などの無効な日付を見つける必要があります。

簡単なクエリが役に立ちます。

4

3 に答える 3

6

SQLServerのISDATE関数を使用できます。参照: ISDATE(Transact-SQL)、 SQLServer2005でのDateTime文字列の検証

サンプル:

SELECT dt, ISDATE(dt) ValidDate
FROM(
    SELECT '31-Feb-2012' AS dt UNION
    SELECT '31-Jan-2012' AS dt 
)x

ISDATE式が有効な日付、時刻、または日時の値である場合は1を返します。それ以外の場合は0。

次を使用して、既存のテーブルデータを確認できます。

SELECT 
    date_of_birth, 
    ISDATE(date_of_birth) ValidDate 
FROM 
    YourTable
于 2012-12-26T11:46:02.267 に答える
1

編集-質問はDBMSについて言及していませんでした、タグはMs-sqlを指定します。

あなたがそれをしたいならMySQL

mysql> SELECT DATE_ADD('2012-02-29', INTERVAL 0 DAY);
+----------------------------------------+
| DATE_ADD('2012-02-29', INTERVAL 0 DAY) |
+----------------------------------------+
| 2012-02-29                             |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('2011-02-29', INTERVAL 0 DAY);
+----------------------------------------+
| DATE_ADD('2011-02-29', INTERVAL 0 DAY) |
+----------------------------------------+
| NULL                                   |
+----------------------------------------+
1 row in set, 1 warning (0.00 sec)

無効な日付の場合、DATE_ADDNULLを返します。他のより良い方法があるかもしれません。

于 2012-12-26T11:44:26.137 に答える
1

うるう年は次のように決定できます。

 if year modulo 400 is 0 then
    is_leap_year
else if year modulo 100 is 0 then
   not_leap_year
else if year modulo 4 is 0 then
   is_leap_year
else
   not_leap_year
于 2012-12-26T22:09:53.557 に答える