当月和日小于当前日期时选择记录

时间:2017-07-05 21:05:07

标签: sql ssms

我正在使用SQL Server Mgmt Studio。我需要创建一个公式,只有在日期/时间字段LAW_TAEEMASTER.MASTR_ENTRY的月份和日期小于或等于当前月份和日期时才会选择记录。例如,如果LAW_TAEEMASTER.MASTR_ENTRY = 8/20/2015且当前日期= 7/6/2017,则排除。如果LAW_TAEEMASTER.MASTR_ENTRY = 12/21/2014,当前日期= 1/15/2017,请加入。日期格式化是我的弱点。这是我尝试过的:

select LAW_TAEEMASTER.MASTR_ENTRY
    from LAW_TAEEMASTER
    WHERE day(LAW_TAEEMASTER.MASTR_ENTRY) <= DAY(GETDATE()) and MONTH(LAW_TAEEMASTER.MASTR_ENTRY) <= MONTH(getdate())

select LAW_TAEEMASTER.MASTR_ENTRY
        from LAW_TAEEMASTER
        WHERE AND DATEPART(DAY,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(DAY,GETDATE()) AND DATEPART(MONTH,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(MONTH,GETDATE())

但这些只是分别评估月份和日期以及大于或小于的数字,因此它不包括记录。我怎样才能让SQL将这些识别为日期的一部分而忽略这一年?

3 个答案:

答案 0 :(得分:0)

解释逻辑和代码: 使用CONVERT(varchar(5),<your_date> ,110))110争论意味着美国标准时间,并且具有mm-dd-yyyy之类的输出。然后我们只取前五个字符,即日期的月份和日期。

  

110 = mm-dd-yyyy   详细了解cast and convert here

我的样本表:

MASTER_ENTRY
2017-08-30
2017-07-05
2017-07-04

然后我执行了此查询

SELECT LAW_TAEEMASTER.MASTR_ENTRY 
FROM LAW_TAEEMASTER
WHERE CONVERT(varchar(5),LAW_TAEEMASTER.MASTR_ENTRY ,110) <=  CONVERT(varchar(5),GETDATE() ,110)

结果:月份和日期等于或等于当前月份和日期

MASTER_ENTRY
2017-07-05
2017-07-04

我希望这对StackOverflow有所帮助和欢迎。如果您发现此答案或任何其他答案可以解决您的问题,请将其标记为解决方案。这将有助于社区和未来遇到同样问题的程序员。感谢。

答案 1 :(得分:0)

我会使用month()day()

执行此操作
where month(LAW_TAEEMASTER.MASTR_ENTRY) * 100 + day(LAW_TAEEMASTER.MASTR_ENTRY) < month(getdate()) * 100 + day(getdate())

如果性能有问题,我建议使用带索引的计算列。

答案 2 :(得分:-1)

诀窍是通常以类似CCYYMMDD格式的方式将数据存储在表中。然后,您可以使用普通比较运算符比较日期。所以2017年7月5日将是20170705.你经常得到ISO Date formats 还有其他格式,就像1st Jan 1970之类的毫秒数一样。 如果时区也发挥作用,事情会变得更加复杂(UTC)。 如果您使用简单的CCYYMMDD格式,只需将10000除以并使用余数进行比较就可以进行MMDD比较。