problema

08/09/2003 - 23:24 por miguel | Informe spam
tengo un problema con un CASE el cual me reclama por el
tipo de dato, en la tabla esta com ovarchar pero ya no se
donde mas poner chars para komverirlo. porfa ayudenme
aki esta el kodigo


select
case
when (((ROUND(Dat_Turnos_Extras.Hora_Salida,2)-
FLOOR(Dat_Turnos_Extras.Hora_Salida))*100)/60)




(((ROUND(Dat_Turnos_Extras.Hora_Termino,2)-
FLOOR(Dat_Turnos_Extras.Hora_Termino))*100)/60)

then cast(SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino))- SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida))+(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Salida,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)
-
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Termino,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)as float)

else cast(SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino))- SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida))
+
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Termino,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)
-
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Salida,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida)))*100)/60)as float)
end,
CAST( Dat_Turnos_Extras.Hora_Salida AS float),cast
(Dat_Turnos_Extras.Hora_Termino as float)

FROM Dat_Turnos_Extras

GROUP BY Dat_Turnos_Extras.Hora_Salida,
Dat_Turnos_Extras.Hora_Termino


y el error

Servidor: mensaje 8114, nivel 16, estado 5, línea 1
Error al convertir el tipo de datos varchar a float.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
09/09/2003 - 06:30 | Informe spam
Fijate si puedes mostrarnos el CREATE TABLE de la tabla Dat_Turnos_Extras.
Asi nos es más fácil hacer pruebas para ayudarte.

Muchos saludos
gux

Gustavo Larriera, MSFT MVP-SQL
Uruguay LatAm

This message is provided "AS IS" with no warranties expressed or implied,
and confers no rights.


"miguel" wrote in message
news:41cb01c3764f$8d5d9400$
tengo un problema con un CASE el cual me reclama por el
tipo de dato, en la tabla esta com ovarchar pero ya no se
donde mas poner chars para komverirlo. porfa ayudenme
aki esta el kodigo


select
case
when (((ROUND(Dat_Turnos_Extras.Hora_Salida,2)-
FLOOR(Dat_Turnos_Extras.Hora_Salida))*100)/60)



(((ROUND(Dat_Turnos_Extras.Hora_Termino,2)-
FLOOR(Dat_Turnos_Extras.Hora_Termino))*100)/60)

then cast(SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino))- SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida))+(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Salida,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)
-
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Termino,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)as float)

else cast(SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino))- SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida))
+
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Termino,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Termino)))*100)/60)
-
(((SUM(ROUND
(Dat_Turnos_Extras.Hora_Salida,2))-SUM(FLOOR
(Dat_Turnos_Extras.Hora_Salida)))*100)/60)as float)
end,
CAST( Dat_Turnos_Extras.Hora_Salida AS float),cast
(Dat_Turnos_Extras.Hora_Termino as float)

FROM Dat_Turnos_Extras

GROUP BY Dat_Turnos_Extras.Hora_Salida,
Dat_Turnos_Extras.Hora_Termino


y el error

Servidor: mensaje 8114, nivel 16, estado 5, línea 1
Error al convertir el tipo de datos varchar a float.
Respuesta Responder a este mensaje
#2 miguel
09/09/2003 - 16:24 | Informe spam
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[Dat_Turnos_Extras]') and OBJECTPROPERTY
(id, N'IsUserTable') = 1)
drop table [dbo].[Dat_Turnos_Extras]
GO

CREATE TABLE [dbo].[Dat_Turnos_Extras] (
[COD_EMPRESA] [varchar] (3) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_INSTALACION] [varchar] (3) COLLATE
Modern_Spanish_CI_AS NULL ,
[FECHA] [datetime] NULL ,
[RUT_EMPLEADO] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_ASISTENCIA] [int] NULL ,
[ASISTENCIA] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_TURNO] [varchar] (1) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_TIPOPERSONAL] [int] NULL ,
[PERSONAL] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_CARGO] [int] NULL ,
[CARGO] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[HORA_TERMINO] [varchar] (5) COLLATE
Modern_Spanish_CI_AS NULL ,
[HORA_SALIDA] [varchar] (5) COLLATE
Modern_Spanish_CI_AS NULL ,
[RUT_ENLACE] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL ,
[RUT_REEMPLAZO] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO
Respuesta Responder a este mensaje
#3 Yolanda Herrero
09/09/2003 - 16:50 | Informe spam
Hola Miguel,

¿Cómo son los datos que tienes en las columnas de "Hora Termino" y "Hora
Salida"?

Si haces el CAST con valores como '12.30' sí funciona, pero si lo haces con
valores como '12,30' o '12:30' no funciona (debido a la coma o los dos
puntos). Lo mismo ocurre para las funciónes ROUND y FLOOR.

Si utilizas la función REPLACE para sustituir la coma o los dos puntos por
un punto te funcionará correctamente:

CAST(REPLACE(HORA_TERMINO, ':', '.') AS FLOAT)

No olvides hacer el CAST en las funciones ROUND y FLOOR.

Saludos!


"miguel" escribió en el mensaje
news:06a301c376de$0ca05fc0$
if exists (select * from dbo.sysobjects where id > object_id(N'[dbo].[Dat_Turnos_Extras]') and OBJECTPROPERTY
(id, N'IsUserTable') = 1)
drop table [dbo].[Dat_Turnos_Extras]
GO

CREATE TABLE [dbo].[Dat_Turnos_Extras] (
[COD_EMPRESA] [varchar] (3) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_INSTALACION] [varchar] (3) COLLATE
Modern_Spanish_CI_AS NULL ,
[FECHA] [datetime] NULL ,
[RUT_EMPLEADO] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_ASISTENCIA] [int] NULL ,
[ASISTENCIA] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_TURNO] [varchar] (1) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_TIPOPERSONAL] [int] NULL ,
[PERSONAL] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[COD_CARGO] [int] NULL ,
[CARGO] [varchar] (50) COLLATE
Modern_Spanish_CI_AS NULL ,
[HORA_TERMINO] [varchar] (5) COLLATE
Modern_Spanish_CI_AS NULL ,
[HORA_SALIDA] [varchar] (5) COLLATE
Modern_Spanish_CI_AS NULL ,
[RUT_ENLACE] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL ,
[RUT_REEMPLAZO] [varchar] (12) COLLATE
Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO


Respuesta Responder a este mensaje
#4 Yolanda Herrero
09/09/2003 - 17:07 | Informe spam
ya, pero con qué separas las horas de los minutos??? con puntos, comas, dos
puntos???

"miguel" escribió en el mensaje
news:56a301c376e3$201f45c0$
son de tipo varchar
Respuesta Responder a este mensaje
#5 Yolanda Herrero
09/09/2003 - 17:14 | Informe spam
Mira, esto es lo que te quería decir. En Hora_Salida he metido un valor así:
'12,30' y en Hora_Termino uno así: '08,40'. He utilizado un replace para
sustituir la coma y me funciona perfectamente. Espero que te funcione:

select
case
when (((ROUND(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.'),2)-
FLOOR(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.')))*100)/60)



(((ROUND(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'),2)-
FLOOR(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.')))*100)/60)

then cast(SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.')))- SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.')))+(((SUM(ROUND
(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.'),2))-SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'))))*100)/60)
-
(((SUM(ROUND
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'),2))-SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'))))*100)/60)as float)

else cast(SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.')))- SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.')))
+
(((SUM(ROUND
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'),2))-SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.'))))*100)/60)
-
(((SUM(ROUND
(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.'),2))-SUM(FLOOR
(REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.'))))*100)/60)as float)
end,
CAST( REPLACE(Dat_Turnos_Extras.Hora_Salida,',','.') AS float),cast
(REPLACE(Dat_Turnos_Extras.Hora_Termino,',','.') as float)

FROM Dat_Turnos_Extras

GROUP BY Dat_Turnos_Extras.Hora_Salida,
Dat_Turnos_Extras.Hora_Termino
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida