W SQL Server możesz użyć ISDATE() funkcja sprawdzająca, czy wartość jest poprawną datą.
Mówiąc dokładniej, ta funkcja sprawdza tylko, czy wartość jest prawidłową datą , czas lub data i godzina wartość, ale nie datetime2 wartość. Jeśli podasz datetime2 wartość, ISDATE() powie, że to nie jest data (zwróci 0 ).
Ten artykuł zawiera przykłady tej funkcji.
Składnia
Po pierwsze, oto składnia:
ISDATE ( expression )
Gdzie expression to wyrażenie do przetestowania.
Przykład 1 – prawidłowa data
Oto przykład z użyciem prawidłowego wyrażenia:
SELECT ISDATE('2000-01-01') AS Result; Wynik:
+----------+ | Result | |----------| | 1 | +----------+
Zwraca 1 , co oznacza, że jest to prawidłowa data , czas lub data i godzina wartość.
Przykład 2 – Nieprawidłowa data
Oto przykład z nieprawidłowym wyrażeniem:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result; Wynik:
+----------+ | Result | |----------| | 0 | +----------+
Zwraca 0 , co oznacza, że nie jest to prawidłowa data , czas lub data i godzina wartość.
Przykład 3 – Korzystanie ze zwracanej wartości
Możesz użyć instrukcji warunkowej, aby skorzystać ze zwracanej wartości (zamiast wyświetlać tylko 0 lub 1 ).
Oto prosty przykład, w którym po prostu wypisujemy Ważną datę lub Nieprawidłowa data , w zależności od tego, czy zwracana wartość to 1 lub 0 :
IF ISDATE('2000-01-01') = 1
PRINT 'Valid Date'
ELSE
PRINT 'Invalid Date'; Wynik:
Valid Date
Przykład 4 – Twoje ustawienia JĘZYKA
Zwracana wartość ISDATE() zależy od Twojego LANGUAGE i DATEFORMAT ustawienia.
Oto przykład pokazujący, jak ta sama wartość może zwrócić różne wyniki w zależności od LANGUAGE używane ustawienie.
Brytyjski
SET LANGUAGE British;
SELECT ISDATE('20/01/2000') AS '20/01/2000 in British'; Wynik:
Changed language setting to British. +-------------------------+ | 20/01/2000 in British | |-------------------------| | 1 | +-------------------------+
us_english
SET LANGUAGE us_english;
SELECT ISDATE('20/01/2000') AS '20/01/2000 in us_english'; Wynik:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Dzieje się tak, ponieważ British używa dd/MM/rrrr sformatuj podczas us_english używa MM/dd/rrrr .
Przykład 5 – Twoje ustawienia DATEFORMAT
Jak wspomniano, wartość zwracana przez ISDATE() zależy również od Twojego DATEFORMAT ustawienia.
Oto przykład pokazujący, jak ta sama wartość może zwrócić różne wyniki w zależności od DATEFORMAT używane ustawienie.
mój
SET DATEFORMAT dmy;
SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy'; Wynik:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is dmy | |--------------------------------------| | 1 | +--------------------------------------+
mdy
SET DATEFORMAT mdy;
SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is mdy'; Wynik:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+