SQL Server - Requiero validar que la fecha sea válida

 
Vista:

Requiero validar que la fecha sea válida

Publicado por kperez (5 intervenciones) el 17/10/2019 18:03:17
Buenos días;
Tengo mi Query donde me presenta la fecha final de un mes X, indipendientemente que fecha coloque en la variable, hasta aquí voy perfectamente. El detalle esta que requiero Validar que la fecha sea válida. De no ser así devolver un valor Nulo como resultado.
Adjunto mi query:

declare @fecha as date ='13/02/2019'

SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@fecha))),DATEADD(mm,1,@fecha)),104) Fecha,
'Último día del mes' Descripción
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 73
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Francisco (29 intervenciones) el 17/10/2019 18:27:01
Hola

Intenta esto:

1
2
3
4
5
6
7
8
9
DECLARE @fecha AS date = '13/02/2019';
 
SELECT
    CASE WHEN ISDATE(@fecha) THEN
        NULL
    ELSE
         CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@fecha))),DATEADD(mm,1,@fecha)),104)
    END AS Fecha,
    'Último día del mes' AS Descripción

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Requiero validar que la fecha sea válida

Publicado por kperez (18 intervenciones) el 17/10/2019 20:34:29
Me manda el siguiente mensaje:
"Se especificó una expresión no booleana en un contexto donde se esperaba una condición, cerca de 'THEN'."

Si agregoun IS NULL antes del THEN pero me da el siguiente mensaje: "El tipo de datos date del argumento no es válido para el argumento 1 de la función isdate."

Luego de esto le agregue a ISDATE el siguiente argumento: "CASE WHEN ISDATE(cast(@fecha as varchar)) IS NULL THEN" pero me manda el siguiente mensaje: "Error al convertir una cadena de caracteres en fecha y/u hora.".

No se si estoy haciendo algo mal.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Isaias (4558 intervenciones) el 17/10/2019 21:09:43
Con el permiso de Francisco

Cambie esta linea

1
CASE WHEN ISDATE(CAST(@fecha AS VARCHAR)) = 0 THEN NULL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Requiero validar que la fecha sea válida

Publicado por kperez (18 intervenciones) el 17/10/2019 22:03:50
AUn sigue apareciendo si le agrego una fecha invalida:


declare @fecha as date ='32/02/2019';

1
2
3
4
5
SELECT
    CASE WHEN ISDATE(CAST(@fecha AS VARCHAR)) = 0 THEN NULL
    ELSE
         CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@fecha))),DATEADD(mm,1,@fecha)),104)
    END AS Fecha

Manda mensaje: "Error al convertir una cadena de caracteres en fecha y/u hora."
Tambien intente modificando mi variable declarada como: "declare @fecha as date ='20190229'"pero aun permanece el mensjae
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 73
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Francisco (29 intervenciones) el 17/10/2019 22:14:19
Gracias a Isaias y kperez por las observaciones

Un par de ojos mas nunca esta demas

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 111
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Javier (45 intervenciones) el 17/10/2019 22:37:45
Intenta de la siguiente manera

1
2
3
4
5
6
DECLARE @fecha as CHAR(8) = '20190231';
 
SELECT	CASE WHEN ISDATE(@fecha) = 0 THEN NULL
		ELSE
				CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@fecha))),DATEADD(mm,1,@fecha)),104)
		END AS Fecha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Requiero validar que la fecha sea válida

Publicado por kperezf (18 intervenciones) el 17/10/2019 22:41:06
realice las pruebas y queda perfecto.
solo una pequeña observación si coloco mi variable de forma "13/02/2019" me devuelve un valor del año 2020.
Para esto realice un ajuste en el Query el cual me toma el año y mes actual, lo comparto con uds:

declare @fecha as char(8) ='13/03/2019' --'20190231'

1
2
3
4
5
SELECT
    CASE WHEN ISDATE(CAST(@fecha AS VARCHAR)) = 0 THEN NULL
    ELSE
         CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,11,@fecha))),DATEADD(mm,-11,@fecha)),104)
    END AS Fecha
Se puede usar con ambos tipos de fecha en la variable declarada

Por lo demas Francisco, Isaias y Javier son la ley muchas gracias
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Isaias (4558 intervenciones) el 18/10/2019 00:05:37
Para eso estamos, para apoyarnos, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lisandro
Val: 51
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Requiero validar que la fecha sea válida

Publicado por Lisandro (20 intervenciones) el 09/12/2019 15:08:27
te sugiero esto

declare @fecha date
set @fecha='02/20/2021'
SELECT DATEADD(month, ((YEAR(@fecha) - 1900) * 12) + MONTH(@fecha), -1) as 'End of month' -- fin de mes
Esa fecha es el fin de mes


End of month
-----------------------
2021-02-28 00:00:00.000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar