【发布时间】:2012-06-24 05:04:21
【问题描述】:
我在使用日期时间字段进行查询时遇到问题。
这是因为我将 datetime 字段转换为 -varchar(10),..,103- 所以我可以在 103 格式而不是 datetime 上应用带有 date 字段的 where 子句,但是当我使用 where 子句时它不会显示结果或按我需要的方式分组,因为日期时间字段已转换为字符串。
以下是示例的简化查询:
select ddate,SUM(ntotal) as Income from Inc_orders
where nbranch=2
and convert(varchar(10),ddate,103)
between '01/06/2010' and '31/06/2010'
group by convert(varchar(10),ddate,103)
order by ddfecha desc
ddate 是日期时间字段
ntotal 是整数
nbranch 是外键
然后发生的是我从另一个 103 日期范围获得结果
01/10/2009 4447.0000
02/01/2010 26267.8000
02/02/2010 20498.0000
02/04/2010 22565.1000
02/05/2010 20539.0000
02/11/2010 33934.3000
02/12/2009 33587.4000
我假装的样子是:
01/06/2010 29327.7000
02/06/2010 31170.4000
03/06/2010 37737.7000
04/06/2010 25109.6000
06/06/2010 20819.7000
10/06/2010 44703.9000
14/06/2010 21755.1000
15/06/2010 39369.3000
05/06/2010 29552.2000
07/06/2010 35305.9000
08/06/2010 30628.6000
..........
31/06/2010 18677.6000
解决方案不使用 datepart、month 或 year 函数,因为我需要 参数看起来像一个日历,以在其上应用 datetimepicker calentad 组合对象。
【问题讨论】:
-
你为什么要转换日期时间?
-
我正在对其进行转换,以便我可以应用对象 datetimepicker 在 adoquery for delphi 上放置不同的间隔。也用于以这种方式在网格上显示信息。
-
只需反过来,将来自 datepicker 的值转换为格式“YYYYMMAA”,您将确保您的应用始终适用于任何输入
-
好的,但我还需要以 dd/mm/yyyy 格式在网格上显示日期。我要把它应用到其他表格上。 TY
-
传递给查询的内容和从中获得的内容不同。因此,正如我所建议的,仅在选择列表上使用 CONVERT 以获得最适合您的格式。但是使用标准将参数传递给查询:YYYYMMDD 是一种无失败格式。或者,如果您输入了数据,则使用参数化查询。
标签: sql sql-server datetime varchar