我正在使用 SQL Server 2005 Management Studio Express 和 Delphi 2010。Fecha_hora
= Date_Time 是smalldatetime
.
我的日期格式是dd/mm/yyy
我表中的日期保存如下:
08/01/2013 11:22:00 a.m.
我在 Delphi 中有这个查询,以了解给定一段时间内的销售额在哪个时间段更高;天/月,在这种情况下,我在 2013 年 1 月 8 日的同一天进行测试:
conect.Q_total_hora.Active:=false;
conect.Q_total_hora.SQL.Clear;
conect.Q_total_hora.SQL.Add('select datepart(hh, fecha_hora) as Hora, sum(Total) as Venta, a.tipo as Tipo');
conect.Q_total_hora.SQL.Add('from ventas v join articulos a on v.id_articulo=a.id_articulo');
conect.Q_total_hora.SQL.Add('where tipo='+char(39)+DBLUCB_tipo.Text+char(39)+' and cast(Convert(varchar(10), fecha_hora, 112) as datetime) between'+char(39)+DateToStr(DateTimePicker_fecha1.Date)+char(39)+ 'and'+char(39)+DateToStr(DateTimePicker_fecha2.Date)+char(39));
conect.Q_total_hora.SQL.Add('group by datepart(hh,fecha_hora), a.tipo order by datepart(hh,fecha_hora) ');
conect.Q_total_hora.Active:=true;
我之所以使用cast(Convert(varchar(10), fecha_hora, 112) as datetime)
,是因为我在互联网上发现这样我只能检索日期,而没有时间检索日期之间的数据。
在DateTimePickers
我选择08/01/2013
作为 2013 年 1 月 8 日
我用备忘录查看查询memo1.Text:=conect.Q_total_hora.Text;
我收到的查询是:
select datepart(hh, fecha_hora) as Hora, sum(Total) as Venta, a.tipo as Tipo
from ventas v join articulos a on v.id_articulo=a.id_articulo
where tipo='Burrito Grande' and cast(Convert(varchar(10), fecha_hora, 112) as datetime) between'08/01/2013'and'08/01/2013'
group by datepart(hh,fecha_hora), a.tipo order by datepart(hh,fecha_hora)
我遇到的问题是,当我在 SQL Server Mgmt Studio 中运行此查询时,它返回值,但在 Delphi 中不返回,并且在 Delphi 中,如果我将 的值设置DateTimePickers
为01/08/2013
2013 年 8 月 1 日,它会返回08/01/2012
.
据我所知(而且我知道的不多......)当我向 SQL Server 发送查询时,就像我用 SQL 编写它......为什么如果我将日期08/01/2013
作为字符串发送它不返回任何东西?
先感谢您。我不擅长数据库,大多数东西我在互联网上寻找它们^^