Wiem, że istnieje funkcja o nazwie isdate() do sprawdzania poprawności kolumn datetime, ale działa tylko dla typów smalldatetime i datetime. Pytanie brzmi: czy istnieje podobny sposób sprawdzania poprawności nowego typu danych datetime2 w serwerze sql 2008 i 2012?Czy istnieje funkcja taka jak isdate() dla datetime2?
Odpowiedz
W SQL Server 2012, można użyć TRY_CONVERT
:
SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'),
TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623');
Wyniki:
2012-02-02 13:42:55.2323623 NULL
Albo TRY_PARSE
: (. Same wyniki)
SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2),
TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2);
Przepraszam, że nie mam mądrą odpowiedź na ciebie < 2012 roku można było, jak sądzę, powiedzieć
SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23);
Ale to wydaje się brudna.
TRY_CONVERT
documentation on MSDN
TRY_PARSE
documentation on MSDN
fajny ................ –
Sprytna odpowiedź! Podobało mi się to bardzo! Kolejne pytanie dotyczące datetime2 w serwerze sql 2008, czy istnieje sposób, aby sprawdzić poprawną datę, gdy wartość jest coś jak przed "1 stycznia 1753"? Użycie tego polecenia spowoduje wypisanie nieprawidłowej daty SELECT ISDATE (LEWEJ ('2012-02-02 13: 42: 55.2323623', 23)); – Vladimir
@ Vladimir sorry Właśnie zauważyłem twoje pytanie. Czy to akademickie czy naprawdę masz daty <1753? –
ściśle mówiąc ISDATE() nie zatwierdzić kolumny datetime; sprawdza poprawność, czy wyrażenie może być analizowane jako datetime. Po tym, jak jest w kolumnie, jest trochę za późno! –
@MitchWheat to dobry punkt. Wydaje się, że istnieje większe prawdopodobieństwo sprawdzenia błędnie błędnie zapisanych dat w kolumnie varchar lub (b) parametrów wejściowych o niepoprawnym typie danych. –
Chciałbym sprawdzić dane wejściowe z arkusza excel, który ma niektóre kolumny daty w tabeli tymczasowej. – Vladimir