2012-09-04 11 views

Respuesta

16
SET DATEFORMAT MDY; 
SELECT CASE WHEN ISDATE(@string) = 1 
    AND @string LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' 
    THEN 1 ELSE 0 END; 

Si el resultado es 1, es una fecha válida, pero no hay garantía de que sea la fecha que el usuario quiso decir. Si entran:

06/07/2012 

No hay manera de saber si se referían 7 junio o julio 6. La mejor opción es hacer que los usuarios elegir las fechas de menús desplegables o los controles de calendario, lo que le permite controlar el formato y evite cualquier interpretación innecesaria. Su capa de aplicación puede usar variables/parámetros fuertemente tipados e insertar en columnas correctamente tipadas.

+2

+1 - Cabe señalar que esto es, por supuesto, insinuando que las fechas/horas ** NO DEBEN ** estar almacenadas como tipos de cadenas, sino como sus tipos apropiados. Si estás tratando de descubrir qué está usando una base de datos ... podrías tener algunos problemas. –

+0

@ X-Zero gracias, agregó una declaración explícita sobre eso. –

3

Si lo que busca es el Formato de Fecha de SQL Server para ver si se trata de MDY a continuación, utilizar:

dbcc useroptions 

Y echar un vistazo a la dateformat conjunto de opciones de

+0

+1 - ¿sabes cómo cambiarlo? –

0

Tienes que hacerlo fuera de la base de datos. Una base de datos almacena datetime internamente en su propio formato. No creo que pueda leer en qué formato está almacenada la fecha. Puede leerla como desee, por ejemplo dd/mm/aaaa o aaaa/mm/dd, etc.

Lo que puede hacer es verificar esto valor fuera de la base de datos para cualquier campo de fecha. Puedes usar expresiones regulares para eso. Pero eso estará fuera de la base de datos.

2

a convertir la fecha a DateString en este formato MM/DD/AAAA usando CONVERT function

select convert(varchar(10),getdate(),101) 

La salida será el del 8 de Sept 2012

09/08/2012 

No hay necesidad de validar, otra luego verificando el campo de fecha es nulo o no

Cuestiones relacionadas