2012-06-15 28 views
5

Sé que hay una función llamada isdate() para validar las columnas de fecha y hora, pero solo funciona para los tipos smalldatetime y datetime. La pregunta es: ¿existe alguna forma similar de validar el nuevo tipo de datos datetime2 en el servidor sql 2008 y 2012?¿Hay una función como isdate() para datetime2?

+3

estrictamente hablando ISDATE() no valida columnas de fecha y hora; valida si una expresión se puede analizar como una fecha y hora. ¡Después de que está en una columna, es un poco tarde! –

+1

@MitchWheat ese es un buen punto. Parece más probable validar (a) fechas almacenadas incorrectamente en una columna varchar o (b) parámetros de entrada que son de un tipo de datos incorrecto. –

+0

Me gustaría validar la entrada de una hoja de Excel que tiene algunas columnas de fecha en una tabla temporal. – Vladimir

Respuesta

12

En SQL Server 2012, puede utilizar TRY_CONVERT:

SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'), 
     TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623'); 

Resultados:

2012-02-02 13:42:55.2323623 NULL 

O TRY_PARSE: (. Los mismos resultados)

SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2), 
     TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2); 

Lo siento que no tengo una respuesta inteligente para usted para < 2012. Podría, supongo, por ejemplo

SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23); 

Pero eso se siente sucio.

TRY_CONVERT documentation on MSDN
TRY_PARSE documentation on MSDN

+0

nice one ................ –

+0

¡Respuesta inteligente! ¡Me gusto mucho! Otra pregunta sobre datetime2 en sql server 2008, ¿hay alguna manera de verificar la fecha válida cuando el valor es algo así como antes del "1 de enero de 1753"? El uso de este comando arrojaría una fecha no válida SELECT ISDATE (IZQUIERDA ('2012-02-02 13: 42: 55.2323623', 23)); – Vladimir

+0

@Vladimir lo siento, acabo de ver su pregunta ahora. ¿Es académico o realmente tienes fechas <1753? –

Cuestiones relacionadas