En SQL Server, puede usar ISDATE()
función para verificar si un valor es una fecha válida.
Para ser más específicos, esta función solo verifica si el valor es una fecha válida. , tiempo o fechahora valor, pero no un datetime2 valor. Si proporciona una fecha y hora2 valor, ISDATE()
le dirá que no es una fecha (devolverá 0
).
Este artículo contiene ejemplos de esta función.
Sintaxis
Primero, aquí está la sintaxis:
ISDATE ( expression )
Donde expression
es la expresión a probar.
Ejemplo 1:fecha válida
Aquí hay un ejemplo usando una expresión válida:
SELECT ISDATE('2000-01-01') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
Esto devuelve 1
, lo que significa que es una fecha válida , tiempo o fechahora valor.
Ejemplo 2:fecha no válida
Aquí hay un ejemplo con una expresión no válida:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result;
Resultado:
+----------+ | Result | |----------| | 0 | +----------+
Esto devuelve 0
, lo que significa que no es una fecha válida , tiempo o fechahora valor.
Ejemplo 3:uso del valor devuelto
Puede usar una declaración condicional para hacer uso del valor devuelto (en lugar de simplemente mostrar 0
o 1
).
Aquí hay un ejemplo básico en el que simplemente imprimimos Fecha válida o Fecha no válida , dependiendo de si el valor de retorno es 1
o 0
:
IF ISDATE('2000-01-01') = 1 PRINT 'Valid Date' ELSE PRINT 'Invalid Date';
Resultado:
Valid Date
Ejemplo 4:su configuración de IDIOMA
El valor de retorno de ISDATE()
depende de tu LANGUAGE
y DATEFORMAT
configuración.
Aquí hay un ejemplo para demostrar cómo el mismo valor puede arrojar diferentes resultados dependiendo del LANGUAGE
configuración utilizada.
Británico
SET LANGUAGE British; SELECT ISDATE('20/01/2000') AS '20/01/2000 in British';
Resultado:
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';
Resultado:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Esto sucede porque British
usa el dd/MM/yyyy formatear mientras us_english
usa MM/dd/aaaa .
Ejemplo 5:su configuración de DATEFORMAT
Como se mencionó, el valor de retorno de ISDATE()
también depende de su DATEFORMAT
configuración.
Aquí hay un ejemplo para demostrar cómo el mismo valor puede arrojar diferentes resultados dependiendo del DATEFORMAT
configuración utilizada.
dma
SET DATEFORMAT dmy; SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy';
Resultado:
+--------------------------------------+ | 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';
Resultado:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+