在SQL Server中,如何以编程方式检查包含日期和月份的日历日期是否比其他特定日期更早?
例如:我需要检查TransactionDate是否在6月30日或之前的所有年份。
TransactionDate <= (June 30)
答案 0 :(得分:3)
像这样使用DATEPART
:
declare @var1 date = '2016-02-07';
declare @var2 date = '2017-02-06';
SELECT CASE
WHEN DATEPART(MM, @var1 ) * 100 + DATEPART(DD, @var1 )
> DATEPART(MM, @var2 ) * 100 + DATEPART(DD, @var2 ) THEN 'YES'
ELSE 'NO' END AS LARGERDATE;
它将日期作为MMDD形式的两个整数进行比较。例如:
'2016-02-07' ==> 207, '2017-02-06' ==> 206
'2010-10-27' ==> 1027, '2017-07-29' ==> 729
答案 1 :(得分:1)
最正确的方法是使用 DATEPART 函数;特别是因为它可以从2008年以来从所有版本的SQL服务器,Azure SQL数据库,Azure SQL数据仓库和并行数据仓库中获得。
您可以使用表达式进行检查,假设您要与@yourCheckDate
变量中存储的日期进行比较
DECLARE @yourCheckDate DATETIME
DECLARE @m INT
DECLARE @d INT
SELECT @yourCheckDate = CAST('2017-6-30 12:15:32' AS DATETIME)
SELECT @m= DATEPART(month, @yourCheckDate)
SELECT @d= DATEPART(day, @yourCheckDate)
-- expression
select 1 where
DATEPART(month,@tranDate) < @m
OR
( DATEPART(month,@tranDate) = @m AND DATEPART(day,@tranDate) <= @d )
答案 2 :(得分:0)
支持任何日历日期的SQL Server 2008解决方案,源自@TheEsisia和@Sami答案
WHERE 100*MONTH(TransactionDate) + DAY(TransactionDate) <= 100*MONTH(@checkDate) + DAY(@checkDate)
答案 3 :(得分:-1)
如果您想要获取从日期到年末的所有日期,这应该有效。基本上构建了一个&xxxx-12-31&#39;输入日期(Oracle中的示例)。
BETWEEN yourDate AND TO_DATE(TO_CHAR(yourDate, 'YYYY') ||'12-31', 'YYYY-MM-DD')