商店程序中的Datepart

时间:2014-03-05 21:07:38

标签: mysql sql sql-server stored-procedures

对于以下查询,我必须比较每个@currentdate和@workingdatekey的mm部分。如何仅比较yyyymmdd格式的mm部分?如果@workingdatekey的月份与@currentdate的月份相同,则继续退出

Declare @currentdate int
set @currentdate =  CONVERT(int,CONVERT(varchar(20),GETDATE(),112))
print @currentdate


Declare @workingdatekey int
set @workingdatekey =  CONVERT(int,CONVERT(varchar(20),GETDATE()-1,112))
print @workingdatekey

3 个答案:

答案 0 :(得分:1)

IF (MONTH(GETDATE()-1) = MONTH(GETDATE()))
 BEGIN
   /* DO something here */
 END
ELSE
 BEGIN
  /* Else do something here*/
 END

答案 1 :(得分:1)

1)如果使用适当的类型([SMALL][DATE]TIME[2])存储日期值,则应使用MONTH函数提取月份数。

2)否则,如果日期值(由于某种原因)存储为INT值(格式:yyyymmdd),那么您可以使用(IntDate / 100) % 100来获取月份数。

DECLARE @NowAsDT DATETIME;
SET     @NowAsDT = GETDATE();
SELECT  @NowAsDT AS CurrentDateDT, MONTH(@NowAsDT) AS CurrentMonthFromDT;
/*
CurrentDateDT           CurrentMonthFromDT
----------------------- ------------------
2014-03-05 23:22:58.023 3
*/

DECLARE @NowAsINT INT;
SET     @NowAsINT = CONVERT(VARCHAR(8), @NowAsDT, 112) -- Style 112 = yyyymmdd
SELECT  @NowAsINT AS CurrentDateINT, (@NowAsINT / 100) % 100 AS CurrentMonthFromINT
/*
CurrentDateINT CurrentMonthFromINT
-------------- -------------------
20140305       3
*/

答案 2 :(得分:0)

您是否有理由将这些值转换为varchar?如果没有,你可以做datepart(mm,“你的日期列”)。这将返回日期的月份。然后你可以这样做:

if datepart(mm, "currentdatekey") = datepart(mm, "workingdatekey")
      print 'They matched'
else
      print 'They are different'