SQL Server - Parametro Fechas - Procedur

 
Vista:

Parametro Fechas - Procedur

Publicado por Beto (7 intervenciones) el 10/04/2018 18:46:50
Buen día
Amigos

Tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Create Procedure usp_MarcadoTrabajador_lst
	@codigo int,
	@fechaIni date,
	@fechaFin date
as
	if @codigo is null or @codigo = ''
	Begin
		print 'Debe ingresar una letra valida.'
		print 'No se ejecutara el procedimiento almacenado.'
		return
	end
 
	begin transaction
		SELECT DISTINCT
			0 AS Item
			,A.USERID
			,A.NAME AS Nombre
			,A.SSN AS DNI
			,CONVERT(DATE, B.CHECKTIME) AS Fecha
			,CAST(DATEPART(HOUR, B.CHECKTIME) AS CHAR(2))+':' +
                        CASE WHEN LEN(CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))) = 1
                             THEN REPLICATE ('0', 1) + CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))
                             ELSE CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))
                             END As Hora
			,CONVERT(VARCHAR,B.CHECKTIME,108)AS HoraTotal
		FROM dbo.USUARIO AS A
			 INNER JOIN .[dbo].[MARCADOR] AS B ON A.USERID = B.USERID
		WHERE A.USERID = @codigo
		      And CONVERT(DATE,CHECKTIME) >= @fechaIni
		      And CONVERT(DATE,CHECKTIME) <=@fechaFin
		If @@ERROR <> 0
 
		begin
			rollback tran
			return
		end
	Commit Transaction
go

Pero cuando hago correr:

Declare @nombre nvarchar(100), @dni nvarchar(8),@fecha date,@hora nvarchar(100), @horatotal nvarchar(100)
exec dbo.usp_MarcadoTrabajador_lst 64, '20180201', '20180229'

Me sale error:
Mens 8114, Nivel 16, Estado 5, Procedimiento usp_MarcadoTrabajador_lst, Línea 0
Error al convertir el tipo de datos varchar a date.

Porfavor si alguien me puede ayudar, a la hora de mandar el EXEC, creo que ahí esta mi duda.
Desea obtener datos desde un rango de fechas.

Gracias.
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
sin imagen de perfil
Val: 14
Ha disminuido su posición en 5 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Parametro Fechas - Procedur

Publicado por Yamil Bracho (39 intervenciones) el 10/04/2018 18:53:08
Separa los componenentes de la fecha con "-"
Es decir exec dbo.usp_MarcadoTrabajador_lst 64, '2018-02-01', '2018-02-29'
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

Parametro Fechas - Procedur

Publicado por Beto (7 intervenciones) el 10/04/2018 21:59:36
Hola
Yamil

De igual forma me sigue saliendo ese error.

Alguien que vio este problemita.

Gracias
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

Parametro Fechas - Procedur

Publicado por Isaias (4558 intervenciones) el 10/04/2018 22:01:32
¿'20180229'?................FEBRERO 29?????
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

Parametro Fechas - Procedur

Publicado por Beto (7 intervenciones) el 10/04/2018 22:04:39
Hola
Isaias

Muchas Gracias

Eso era todo.
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

Parametro Fechas - Procedur

Publicado por Beto (7 intervenciones) el 10/04/2018 22:58:02
Hola
Isaias

Esta es mi query original, ya tengo la primera parte en un SP;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT DISTINCT
      0 AS Item
      ,A.USERID
      ,A.NAME AS Nombre
      ,A.SSN AS DNI
      ,CONVERT(DATE, B.CHECKTIME) AS Fecha
      , CAST(DATEPART(HOUR, B.CHECKTIME) AS CHAR(2))+':' +
                        CASE WHEN LEN(CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))) = 1
                             THEN REPLICATE ('0', 1) + CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))
                             ELSE CAST(DATEPART(MINUTE, B.CHECKTIME) AS CHAR(2))
                             END As Hora1
      ,CONVERT(VARCHAR,B.CHECKTIME,108)AS Hora
INTO #tmp_Marcador                   
FROM dbo.Usuario AS A
     INNER JOIN [dbo].[Marcador] AS B ON A.USERID = B.USERID
WHERE A.USERID IN (10)
      AND CONVERT(DATE,CHECKTIME) Between '20180222' And '20180322'
ORDER BY  CONVERT(DATE, B.CHECKTIME)
         ,A.NAME
         ,CONVERT(VARCHAR,B.CHECKTIME,108)

El resultado lo almaceno en un temporal - #tmp_Marcador -

1
2
3
4
Select Item, USERID, Nombre, DNI, Fecha, Hora1, Max(Hora) Hora
From #tmp_Marcador
Group By Item, USERID, Nombre, DNI, Fecha, Hora1
Order By Fecha, Nombre, Hora

Amigo, como almaceno el resultado para seguir utilizando la información en un SP, con el objetivo de obtener el Max(Hora) - Máximo Marcado -

Gracias
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 Plutarco
Val: 122
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Parametro Fechas - Procedur

Publicado por Plutarco (46 intervenciones) el 11/04/2018 18:56:30
Buenas tardes,

Para guardar la hora no lo hagas en un campo varchar, para eso existe el campo tipo TIME que es exclusivo para la información que necesitas.

Espero te sea de ayuda el comentario

Tipo de datos SQL Server formato del literal de cadena predeterminado

time hh:mm:ss[. nnnnnnn]
date AAAA-MM-DD
datetime2 AAAA-MM-DD hh:mm:ss[. nnnnnnn]
datetimeoffset AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm


Salud2
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

Parametro Fechas - Procedur

Publicado por Isaias (4558 intervenciones) el 11/04/2018 19:10:59
No me queda clara la duda que expones
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

Parametro Fechas - Procedur

Publicado por Beto (7 intervenciones) el 11/04/2018 19:26:53
Hola
Isaias

Amigo, la informacion(resultado) del query anterior se almacena en un temporal #tmp_Marcador. -----> Esto ya esta en un SP. (El primer SP publicado, solo la fecha '20180229' se cambio a '20180228' y corrio todo)

Luego; el #tmp_Marcador se utilizo para obtener la hora maxima [max(Hora)], esto con el group by mostrado.

Todo lo descrito, deseo xfavor llevarlo a un sp.

Gracias
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

Parametro Fechas - Procedur

Publicado por Isaias (4558 intervenciones) el 11/04/2018 21:51:29
No declares tu tabla TEMPORAL, declarala normal, TRUNCAS, insertas y procesas con tu procedimiento almacenado
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

Parametro Fechas - Procedur

Publicado por Isaias (4558 intervenciones) el 11/04/2018 21:52:26
Otra cosa que puedes hacer, es una FUNCION ESCALAR, que te regrese el resultado y lo cache el PROCEDIMIENTO ALMACENADO
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