Programación General > Bases de Datos
Sumar Horas En Sentencia Sql
UserCode:
Tengo esto montado asi:
--- Código: Text --- SQL2 = "Select Sum(TotalHrsD) AS THrsD, Sum(TotalHrsN) AS THrsN, Sum(TotalHrsLb) As THrsLb, Sum(Clausula26) As Clau26, "SQL2 = SQL2 & "Sum(TotalExtD) AS THrsExtD, Sum(TotalExtN) AS THrsExtN "SQL2 = SQL2 & "From chl_tb "SQL2 = SQL2 & "Where NumEmp=" & TxtNEmp.Text & " And "SQL2 = SQL2 & "Fecha Between #" & Format(DTPFecha1.Value, "yyyy-mm-dd") & "# And #" & Format(DTPFecha2.Value, "yyyy-mm-dd") & "# "
Si le pongo Convert para pasar el dato a Numerico o Float me da error.
Probé esta SQL corta y simple en Access: (Prueba)
Select Convert(Numeric(chl_tb.TotalHrsD)) From chl_tb;
Select Convert(Numeric,TotalHrsD) From chl_tb;
Select Convert(Numeric(3),TotalHrsD) From chl_tb;
Y me saca el aviso de:
La función "Convert" no está definida en la expresion, espero que sea que la sintaxis está mal escrita y no que Access no tenga soporte para ella. Es increible, no he podido conseguir una web que me detalle a CONVERT, solo verlo entre lineas de otras SQL y son otras conversiones o están en una sintaxis de Query ASP.
F_Tanori:
la sintaxis en SQL de Convert
es Convert(tipo_de_dato,valor )
ejemplo
--- Código: Text ---Convert(varchar(20),folio)
pero access no lo permite :P
si quieres convertir, y como te digo puedes usar la funciones incorporadas de la base de datos, (incluso de usuario)
por ejemplo:
--- Citar ---CStr(valor)
CBool(valor)
CDbl(valor)
CInt(valor)
CDate(valor)
Str(valor)
Int(valor)
Val(valor)
--- Fin de la cita ---
etc todas las funciones disponibles :P
ahora aplicando
--- Código: Text --- DateDiff('n', [TotalHrsD],[TotalHrsD]) As TotalHrsLbD
[dohtml]
<table border=1>
<tbody><tr class="trbgeven">
<th>Valor</th>
<th>Descripción</th>
</tr>
<tr class="trbgodd">
<td>yyyy</td>
<td>Año</td>
</tr>
<tr class="trbgeven">
<td>q</td>
<td>Trimestre</td>
</tr>
<tr class="trbgodd">
<td>m</td>
<td>Mes</td>
</tr>
<tr class="trbgeven">
<td>y</td>
<td>Día del año</td>
</tr>
<tr class="trbgodd">
<td>d</td>
<td>Día</td>
</tr>
<tr class="trbgeven">
<td>w</td>
<td>Día de la semana</td>
</tr>
<tr class="trbgodd">
<td>ww</td>
<td>Semana</td>
</tr>
<tr class="trbgeven">
<td>h</td>
<td>Hora</td>
</tr>
<tr class="trbgodd">
<td>n</td>
<td>Minutos</td>
</tr>
<tr class="trbgeven">
<td>s</td>
<td>Segundos</td>
</tr>
</tbody></table>
[/dohtml]
'n' indica que es en minutos entonces
05:00
05:00
--------
0
la diferencia son 0 pues es exactamente la misma hora
en el caso de
05:30
05:00
-------
30
como quedamos si ejecutas la funcion DateDiff con el parametro 'n' (en minutos) entonces todas las diferencias seran en minutos
al final sumas todos los minutos y los divides entre 60 y sacas las horas y de das formato de hora
aunque seria conveniente sacar diferencias en la unidad mas pequeña ('s') para despues convertirlos en horas y no perder los segundos (que pueden llegar a ser horas)
Espero te sea de ayuda
Saludos
UserCode:
Tremendo detalles con el post, ahora le vengo yo B)
Bueno en la tabla tengo estos dos registros con estos datos con intenciones de que exista alguna suma de ellos:
Hice una prueba con esto haber que arrojaba:
--- Código: Text --- Select DateDiff('h', [TotalHrsD], [TotalHrsD]) As TotalHrsLbD From chl_tb;
Pero sea colocando 'n' para minutos o 'h' para horas (5+4=9) siempre sale un 0:
Esta suma debe estar presente tanto en la ventana que por los momentos no muestra nada de eso:
Y en el reporte de la misma que tampoco tiene nada de eso aun, lo cual deberia estar al final de las columnas indicadas, les faltan esos mismos toltales:
Con la misma SQL, ya podría incrustarla en el reporte el cual la generaria la cargarse.
]
No sé que tan obligadas sean esas columnas de datos, ojala no sea tan necesaria y puedan omitirse <_<
F_Tanori:
--- Cita de: "UserCode" ---Tremendo detalles con el post, ahora le vengo yo B)
Bueno en la tabla tengo estos dos registros con estos datos con intenciones de que exista alguna suma de ellos:
Hice una prueba con esto haber que arrojaba:
--- Código: Text --- Select DateDiff('h', [TotalHrsD], [TotalHrsD]) As TotalHrsLbD From chl_tb;
No sé que tan obligadas sean esas columnas de datos, ojala no sea tan necesaria y puedan omitirse <_<
--- Fin de la cita ---
bueno, uno de tus problemas pricipales esque andas confundido
DateDiff ---> digamos que significa Diferencia de Fechas en español y en el mismo español (o castellando para que no haya lios despues con eso :P) Diferencia hablando "matematicamente" significa Resta :P
entonces si vemos la siguiente funcion que estas aplicando esta asi
--- Código: Text ---DateDiff('h', [TotalHrsD], [TotalHrsD]) as TotalHrsLbD
si lo vemos con datos seria asi
DateDiff('h', 05:00, 05:00) y su resultado es 0 ya que no hay horas('h') de diferencia
y los parametros que le estas colocando es la misma columna por lo cual siempre te dara 0 sea el valor que sea.
Los campos calculados como en esta caso TotalHrsLbD las funciones o formulas actuan sobre el registro no sobre la tabla
es como tener esto:
--- Código: Text ---select cantidad,precio,([cantidad]*[precio]) as Importe from ventas
[dohtml]<table border=1>
<tr><td>cantidad </td><td>Precio</td><td>Importe </td></tr>
<tr><td>10</td><td>50</td><td>500</td></tr>
<tr><td>6</td><td>90</td><td>540 </td></tr>
<tr><td>4</td><td>210 </td><td>860 </td></tr>
</table>[/dohtml]
el calculo del importe aplica por registro lo mismo esta pasando con las horas en tu caso
lo que yo sugeria hacer es
--- Código: Text ---SELECT (Sum(DateDiff('n',[hora],[hora2]))/60) AS Total_horasFROM chl_tb Where numemp='1000' ....los filtros necesario
calcular la diferencia en minutos (es mejor en segundos para obtener el dato mas preciso) hacer la suma de todos y luego sacar su equivalente en horas
Espero te sirva
Saludos
UserCode:
Caramba, DateDiff entonces no me sirve puesto que yo sumo los mismos o distintos datos de un mismo campo_nombre :(
bueno... mañana comienzo nuevamente a ver con qué puedo hacerlo :lightsabre:
:good:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa