lin*_*r85 4 sql-server sql-server-2008
我在上个月写了一个查询,但时间为零(如果今天是2013-05-21那么我想得到2013-04-21 00:00:00.000).
所以我尝试过:
select (dateadd(month,datediff(month,(0),getdate())-1,(0)));
Run Code Online (Sandbox Code Playgroud)
但我得到了上个月的第一天.
然后我尝试了:
select dateadd(month, -1, GETDATE());
Run Code Online (Sandbox Code Playgroud)
我得到了正确的一天,但我也得到了当前时间(2013-04-21 11:41:31.090),我希望时间为零.
那么我的查询应该如何得到类似的东西:2013-04-21 00:00:00.000
提前致谢.
Eri*_*ikE 21
在SQL Server 2008中有date数据类型,没有附加时间.因此,您只需转换,然后执行即可轻松删除时间部分DateAdd.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Run Code Online (Sandbox Code Playgroud)
这将返回一种date数据类型.要强制它datetime再次,你可以简单地再添加一个Convert:
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Run Code Online (Sandbox Code Playgroud)
但是,您可能不需要显式转换datetime.
注意:"从今天起一个月前"可以用许多不同的方式定义.它在SQL Server中的工作方式是返回与上个月最接近当前月份的那一天的日期.这意味着该表达式在3月31日运行时的结果将是2月28日.因此,如果您没有清楚地考虑到这种情况的后果,例如您是否执行了以下情况,则可能无法在某些情况下获得预期结果.月计算多次,期望在不同月份获得同一天(例如3月 - > 2月 - > 1月).
该演示显示了每个表达式的值和结果数据类型.
尝试这样..
select Cast(Cast(dateadd(month, -1, GETDATE()) as Date) as Datetime);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74568 次 |
| 最近记录: |