In SQL Server puoi utilizzare ISDATE() funzione per verificare se un valore è una data valida.
Per essere più specifici, questa funzione controlla solo se il valore è una data valida , tempo o data e ora valore, ma non datetime2 valore. Se fornisci un data/ora2 valore, ISDATE() ti dirà che non è una data (restituirà 0 ).
Questo articolo contiene esempi di questa funzione.
Sintassi
Innanzitutto, ecco la sintassi:
ISDATE ( expression )
Dove expression è l'espressione da testare.
Esempio 1 – Data valida
Ecco un esempio che utilizza un'espressione valida:
SELECT ISDATE('2000-01-01') AS Result; Risultato:
+----------+ | Result | |----------| | 1 | +----------+
Questo restituisce 1 , il che significa che è una data valida , tempo o data e ora valore.
Esempio 2 – Data non valida
Ecco un esempio con un'espressione non valida:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result; Risultato:
+----------+ | Result | |----------| | 0 | +----------+
Questo restituisce 0 , il che significa che non è una data valida , tempo o data e ora valore.
Esempio 3 – Utilizzo del valore di ritorno
Puoi utilizzare un'istruzione condizionale per utilizzare il valore restituito (piuttosto che visualizzare semplicemente 0 o 1 ).
Ecco un esempio di base in cui stampiamo semplicemente Data valida o Data non valida , a seconda che il valore restituito sia 1 o 0 :
IF ISDATE('2000-01-01') = 1
PRINT 'Valid Date'
ELSE
PRINT 'Invalid Date'; Risultato:
Valid Date
Esempio 4 – Impostazioni della LINGUA
Il valore restituito di ISDATE() dipende dalla tua LANGUAGE e DATEFORMAT impostazioni.
Ecco un esempio per dimostrare come lo stesso valore può restituire risultati diversi a seconda del LANGUAGE impostazione utilizzata.
Britannico
SET LANGUAGE British;
SELECT ISDATE('20/01/2000') AS '20/01/2000 in British'; Risultato:
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'; Risultato:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Questo accade perché British utilizza il gg/MM/aaaa format mentre us_english utilizza MM/gg/aaa .
Esempio 5:le tue impostazioni DATEFORMAT
Come accennato, il valore di ritorno di ISDATE() dipende anche dal tuo DATEFORMAT impostazioni.
Ecco un esempio per dimostrare come lo stesso valore può restituire risultati diversi a seconda di DATEFORMAT impostazione utilizzata.
mio
SET DATEFORMAT dmy;
SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy'; Risultato:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is dmy | |--------------------------------------| | 1 | +--------------------------------------+
poco
SET DATEFORMAT mdy;
SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is mdy'; Risultato:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+