查看日期(不包括年份)

时间:2017-05-26 18:52:23

标签: sql sql-server date

在SQL Server中,如何以编程方式检查包含日期和月份的日历日期是否比其他特定日期更早?

例如:我需要检查TransactionDate是否在6月30日或之前的所有年份。

TransactionDate <= (June 30)

4 个答案:

答案 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')