さて、私はSQLにテーブルがあり、日付を含む日付列が含まれており、うるう年の無効な日付、つまりうるう年以外の2月31日または2月29日などの無効な日付を見つける必要があります。
簡単なクエリが役に立ちます。
さて、私はSQLにテーブルがあり、日付を含む日付列が含まれており、うるう年の無効な日付、つまりうるう年以外の2月31日または2月29日などの無効な日付を見つける必要があります。
簡単なクエリが役に立ちます。
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
編集-質問は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_ADD
NULLを返します。他のより良い方法があるかもしれません。
うるう年は次のように決定できます。
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