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 | +--------------------------------------+