Como convertir smalldatetime a solo time y a solo date?

Hola experto!! Estoy tratando de hacer unas sumas de horas... Se necesita saber cuantos minutos acumulados de retardos se tiene en determinado periodo.. Para ello tengo una tabla que me da el reloj checador... Con dos columnas que me interesan: [fecha] y [empleadoid] el tipo de dato de [fecha ] es SmalllDateTime, necesito separa la fecha y la hora.. Convirtiendo smalldatetime a time(0) usando cast y convert me da error.. "no coinciden los tipos de datos. No es posible la conversión" convert(time(0),fecha) lo mismo con CAST(fecha as time(0)).

logre hacerlo con CONVERT(CHAR(10),fecha,108) me va muy bien

junto con la tabla horario de empleados logre obtener mucas cosas, copio código de las dos vistas

checadas

SELECT fecha, CONVERT(CHAR(10), fecha, 103) AS DATE,
CONVERT(char(10), fecha, 108) AS time, notrab, inout, DATENAME(dw,
fecha) AS día,
CONVERT(datetime, fecha, 108)
AS time1, DATENAME(month, fecha) AS mes, DATENAME(year, fecha) AS año,
CASE WHEN datepart(day, fecha)
BETWEEN 1 AND 15 THEN 1 ELSE 2 END AS quincena
FROM dbo.asistencias

entradasalida

SELECT
dbo.checadas.DATE, dbo.checadas.notrab, dbo.checadas.día,
dbo.HORARIOEMPL.hent, dbo.HORARIOEMPL.hsal, CONVERT(char(10),
CASE WHEN MIN(time) > hent THEN
MIN(dbo.checadas.time1) - hent ELSE 0 END, 108) AS retardo1,
CONVERT(CHAR(10), CASE WHEN MAX(time)
<
hsal THEN hsal - MAX(dbo.checadas.time1) ELSE 0 END, 108) AS
anticipadas, CONVERT(CHAR(10), CASE WHEN MAX(time)
> hsal THEN hsal ELSE CASE WHEN MAX(time) < hent THEN hent ELSE MAX(time1) END END, 108) AS salreg, CONVERT(CHAR(10),
CASE WHEN MIN(time) < hent THEN hent ELSE CASE
WHEN MIN(time) > hsal THEN hsal ELSE MIN(time1) END END, 108) AS
entreg,
CONVERT(CHAR(10), CASE WHEN MAX(time)
> hsal THEN hsal ELSE CASE WHEN MAX(time) < hent THEN hent ELSE
MAX(time1)
END END - CASE WHEN MIN(time) <
hent THEN hent ELSE CASE WHEN MIN(time) > hsal THEN hsal ELSE
MIN(time1) END END, 108) AS laborado,
dbo.checadas.mes, dbo.checadas.año, dbo.checadas.quincena
FROM dbo.checadas INNER JOIN
dbo.HORARIOEMPL ON dbo.checadas.día =
dbo.HORARIOEMPL.día AND dbo.checadas.notrab = dbo.HORARIOEMPL.idempl
GROUP BY dbo.checadas.DATE, dbo.checadas.notrab, dbo.checadas.día,
dbo.HORARIOEMPL.hent, dbo.HORARIOEMPL.hsal, dbo.checadas.mes,
dbo.checadas.año, dbo.checadas.quincena

el problema viene cuando quiero sumar las horas de retardo.... Me dice que sum no es valido para char(10) así que cero que sera mejor que intente hacer todo esto pero convirtiendo smalldatetime a time..

Gracias por leer todo el problema.. Gracias por siempre estar en la disposición de ayudar a los demás...

Añade tu respuesta

Haz clic para o