Tan*_*yDB 2 sql sql-server datetime sql-server-2008-r2
我写了一个查询获得第一个月,
SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;
Run Code Online (Sandbox Code Playgroud)
我得到了适当的输出,但我的时间戳显示了当前时间.
这是我在查询中所做的事情,希望我有意义.
用datepart我计算了没有.在第1天和今天之间的天(int)(27-1 = 26)然后使用dateadd函数,我添加了"-datepart"以获得该月的第一天.
这只是改变日期,我应该看什么或读什么来改变时间.我假设它与19000101有关
对于SQL Server 2012(感谢adrift和i-one)
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
SELECT DATEADD(DAY, 1, EOMONTH(@now, -1));
-- or
SELECT DATEFROMPARTS(YEAR(@now), MONTH(@now), 1);
Run Code Online (Sandbox Code Playgroud)
对于SQL Server 2008+
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
-- This shorthand works:
SELECT CONVERT(DATE, @now+1-DAY(@now));
-- But I prefer to be more explicit, instead of relying on
-- shorthand date math (which doesn't work in all scenarios):
SELECT CONVERT(DATE, DATEADD(DAY, 1-DAY(@now), @now));
Run Code Online (Sandbox Code Playgroud)
对于SQL Server 2005
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0);
Run Code Online (Sandbox Code Playgroud)
如果您使用此SQL Server 2005方法,则需要注意:您需要注意使用涉及DATEDIFF查询的表达式.SQL Server可以转换参数并导致可怕的估计 - 如此处所示.采用效率稍低的字符串方法实际上可能更安全:
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5672 次 |
| 最近记录: |