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)
すると、日付間のデータを取得する時間がなくても日付のみを取得できることがわかりました。
2013年 1 月 8 日としてDateTimePickers
選択08/01/2013
クエリを見るためにメモを使用しました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 で の値を2013 年 8 月 1 日として設定すると、 の値が返されることDateTimePickers
です。01/08/2013
08/01/2012
私が知る限り (そして、私はあまり知りません...) SQL Server にクエリを送信すると、SQL で記述しているようなものです...日付08/01/2013
を文字列として送信するのはなぜですか?それは何も返さないのですか?
前もって感謝します。私はデータベースが苦手で、ほとんどのことをインターネットで探します ^^