Programación General > Bases de Datos

 Sumar Horas En Sentencia Sql

<< < (2/3) > >>

UserCode:
Tengo esto montado asi:

--- Código: Text --- SQL2 = &#34;Select Sum(TotalHrsD) AS THrsD, Sum(TotalHrsN) AS THrsN, Sum(TotalHrsLb) As THrsLb, Sum(Clausula26) As Clau26, &#34;SQL2 = SQL2 & &#34;Sum(TotalExtD) AS THrsExtD, Sum(TotalExtN) AS THrsExtN &#34;SQL2 = SQL2 & &#34;From chl_tb &#34;SQL2 = SQL2 & &#34;Where NumEmp=&#34; & TxtNEmp.Text & &#34; And &#34;SQL2 = SQL2 & &#34;Fecha Between #&#34; & Format(DTPFecha1.Value, &#34;yyyy-mm-dd&#34;) & &#34;# And #&#34; & Format(DTPFecha2.Value, &#34;yyyy-mm-dd&#34;) & &#34;# &#34;  
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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa