ISDATE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Devuelve 1 si expression es un valor válido de datetime; en caso contrario, devuelve 0.

ISDATE devuelve 0 si expression es un valor datetime2.

Para una introducción acerca de todos los tipos de datos y funciones de fecha y hora de Transact-SQL, vea Funciones de fecha y hora (Transact-SQL). Tenga en cuenta que el intervalo de datos de fecha y hora es de 01-01-1753 a 31-12-9999, mientras que el intervalo de datos de fecha es de 01-01-0001 a 31-12-9999.

Convenciones de sintaxis de Transact-SQL

Sintaxis

ISDATE ( expression )

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

expression
Es una cadena de caracteres o una expresión que se puede convertir en una cadena de caracteres. La expresión debe tener menos de 4.000 caracteres. No se permiten tipos de datos de fecha y hora, excepto datetime y smalldatetime, como argumento para ISDATE.

Tipo de valor devuelto

int

Observaciones

ISDATE solo es determinista si se usa con la función CONVERT, se especifica el parámetro de estilo CONVERT y el estilo no es igual a 0, 100, 9 ni 109.

El valor devuelto de ISDATE depende de los valores establecidos por SET DATEFORMAT, SET LANGUAGE y la opción de configuración del servidor Idioma predeterminado.

Formatos de expresión ISDATE

Para obtener ejemplos de formatos válidos para los que ISDATE devolverá 1, vea la sección "Formatos de literales de cadena compatibles para datetime" en los temas datetime y smalldatetime. Para obtener más ejemplo, vea también la columna Entrada/salida de la sección "Argumentos" de CAST y CONVERT.

En la tabla siguiente se resumen los formatos de expresión de entrada que no son válidos y devuelven 0 o un error.

Expresión ISDATE Valor devuelto de ISDATE
NULL 0
Valores de tipos de datos incluidos en la lista Tipos de datos en cualquier categoría de tipo de datos distinta de las cadenas de caracteres, cadenas de caracteres Unicode o fecha y hora. 0
Valores de los tipos de datos text, ntexto image. 0
Cualquier valor que tiene una escala de precisión por segundos mayor que 3 (.0000 a.0000000... n) ISDATE devuelve 0 si expression es un valor datetime2, pero devolverá 1 si expression es un valor datetime válido. 0
Cualquier valor que mezcla una fecha válida con un valor no válido, por ejemplo 1995-10-1a. 0

Ejemplos

A. Utilizar ISDATE para probar si una expresión de fecha y hora es válida

En este ejemplo se muestra cómo usar ISDATE para probar si una cadena de caracteres es un tipo datetime válido.

IF ISDATE('2009-05-12 10:19:41.177') = 1  
    PRINT 'VALID'  
ELSE  
    PRINT 'INVALID';  

B. Mostrar los efectos de los parámetros SET DATEFORMAT y SET LANGUAGE en los valores devueltos

Las instrucciones siguientes muestran los valores que se devuelven al establecer SET DATEFORMAT y SET LANGUAGE.

/* Use these sessions settings. */  
SET LANGUAGE us_english;  
SET DATEFORMAT mdy;  
/* Expression in mdy dateformat */  
SELECT ISDATE('04/15/2008'); --Returns 1.  
/* Expression in mdy dateformat */  
SELECT ISDATE('04-15-2008'); --Returns 1.   
/* Expression in mdy dateformat */  
SELECT ISDATE('04.15.2008'); --Returns 1.   
/* Expression in myd  dateformat */  
SELECT ISDATE('04/2008/15'); --Returns 1.  
  
SET DATEFORMAT mdy;  
SELECT ISDATE('15/04/2008'); --Returns 0.  
SET DATEFORMAT mdy;  
SELECT ISDATE('15/2008/04'); --Returns 0.  
SET DATEFORMAT mdy;  
SELECT ISDATE('2008/15/04'); --Returns 0.  
SET DATEFORMAT mdy;  
SELECT ISDATE('2008/04/15'); --Returns 1.  
  
SET DATEFORMAT dmy;  
SELECT ISDATE('15/04/2008'); --Returns 1.  
SET DATEFORMAT dym;  
SELECT ISDATE('15/2008/04'); --Returns 1.  
SET DATEFORMAT ydm;  
SELECT ISDATE('2008/15/04'); --Returns 1.  
SET DATEFORMAT ymd;  
SELECT ISDATE('2008/04/15'); --Returns 1.  
  
SET LANGUAGE English;  
SELECT ISDATE('15/04/2008'); --Returns 0.  
SET LANGUAGE Hungarian;  
SELECT ISDATE('15/2008/04'); --Returns 0.  
SET LANGUAGE Swedish;  
SELECT ISDATE('2008/15/04'); --Returns 0.  
SET LANGUAGE Italian;  
SELECT ISDATE('2008/04/15'); --Returns 1.  
  
/* Return to these sessions settings. */  
SET LANGUAGE us_english;  
SET DATEFORMAT mdy;  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

C. Utilizar ISDATE para probar si una expresión de fecha y hora es válida

En este ejemplo se muestra cómo usar ISDATE para probar si una cadena de caracteres es un tipo datetime válido.

IF ISDATE('2009-05-12 10:19:41.177') = 1  
    SELECT 'VALID';  
ELSE  
    SELECT 'INVALID';  

Consulte también

CAST y CONVERT (Transact-SQL)