Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

ISDATE() Esempi in SQL Server

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