我想选择从今天到最后 15 日(所以本月或上个月)的一系列数据。这将如何在 TSQL 中完成?
在Get last Friday's Date 之后,除非今天是使用 T-SQL 的星期五,否则我似乎DATEDIFF
至少必须使用它。
我正在考虑构建一个日期字符串,例如:
set @date='yyyy-mm-15'
但是yyyy
ormm
不能简单地是当前的年/月,以防它必须回顾一个月/年。
我想选择从今天到最后 15 日(所以本月或上个月)的一系列数据。这将如何在 TSQL 中完成?
在Get last Friday's Date 之后,除非今天是使用 T-SQL 的星期五,否则我似乎DATEDIFF
至少必须使用它。
我正在考虑构建一个日期字符串,例如:
set @date='yyyy-mm-15'
但是yyyy
ormm
不能简单地是当前的年/月,以防它必须回顾一个月/年。
这应该给你你想要的
SELECT *
FROM YourTable
WHERE YourDate > CAST((
CASE
WHEN DAY(getdate()) < 15
THEN (CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(dateadd(month, - 1, getdate())) AS CHAR(2)) + '15')
ELSE CAST(YEAR(GETDATE()) AS CHAR(4)) + CAST(MONTH(GETDATE()) AS CHAR(2)) + '15'
END
) AS DATETIME)
编辑 将 WHEN DAY(getdate()) > 15更改为WHEN DAY(getdate()) < 15,因为结果被反转了:)
将当前日期格式化为 格式yyyy-mm-15
,转换回日期,与当前日期进行比较,如果比今天晚,则减去 1 个月。
这就是我在 ANSI SQL 中所做的……但显然,MS SQL Server 不知道“间隔”。好吧,您可以改用DateAdd:
DateAdd() - 根据向指定日期添加间隔返回新的日期时间值。其中第一个参数指定在日期的哪一部分返回新值:yy(yyyy) 表示年,mm(m) 表示月,dd(d) 表示日等。例如:select dateadd(d,2,getdate( )) - 将 2 天添加到当前日期并返回新日期。