Sql server 在SQLServer中将DD/MM与GetDate()匹配

Sql server 在SQLServer中将DD/MM与GetDate()匹配,sql-server,Sql Server,我有一个带有日期列的表,只包含日期和月份(dd/mm),我想将其与GetDate()进行比较 我的问题是 select * from table_abc where SMSFromDate<=CONVERT(varchar(5),GETDATE(),103) and SMSToDate>=CONVERT(varchar(5),GETDATE(),103) 从表中选择* 其中SMSFromDate=CONVERT(varchar(5),GETDAT

我有一个带有日期列的表,只包含日期和月份(dd/mm),我想将其与GetDate()进行比较

我的问题是

    select * from table_abc
    where SMSFromDate<=CONVERT(varchar(5),GETDATE(),103)
          and SMSToDate>=CONVERT(varchar(5),GETDATE(),103)
从表中选择*
其中SMSFromDate=CONVERT(varchar(5),GETDATE(),103)

但是它没有给我预期的结果

我从中得到的正确查询结果

    ;WITH CTE AS 
    (SELECT convert(DATE, SMSFROMDATE + '/' + CAST(DATEPART(yyyy, getdate()) AS VARCHAR, 103)  AS SMSFROMDATE, 
    convert(DATE, SMSTODATE + '/' + CAST(DATEPART(yyyy, getdate()) AS VARCHAR), 103)   AS SMSTODATE
    FROM TABLE_ABC)
    SELECT * FROM CTE WHERE GETDATE() BETWEEN SMSFROMDATE AND SMSTODATE
    ;WITH CTE AS (
      select 
      convert(date,(SMSFROMDATE + '/' + cast(DATEPART(yyyy, getdate())as varchar)),103) AS SMSFROMDATE,
      convert(date,(SMSTODATE + '/' + cast(DATEPART(yyyy, getdate())as varchar)),103) AS SMSTODATE
     FROM SMSRoadMap_Master
    )
   SELECT * FROM CTE WHERE GETDATE() BETWEEN SMSFROMDATE AND SMSTODATE

你的查询得到了什么?你让它别无选择,只能将这些值作为字符串进行比较。这意味着
08/10
发生在
07/05
09/07
之间。当然,在相反的方向转换也是有问题的-实际上你不能编码/使用
29/02
。@RaduGheorghiu没有结果,因为我认为条件不起作用的地方是字符串,而不是日期,格式不能按时间顺序排列。您必须更改列类型以实际包含日期,或更改字符串格式以使用可排序格式,如
MM-DD
。我不必比较年份,只需检查今天的日期是否大于SMSFromDate&小于SMSToDate。我知道在varchar中这是不可能的,所以我正在寻找一个可以比较它的解决方案。得到这个错误“不允许从数据类型int显式转换为date”您能现在就试试吗。我目前没有SQL Server,因此无法尝试。谢谢@CleanBold,我尝试了,它成功了。在下面贴一个正确的
    ;WITH CTE AS (
      select 
      convert(date,(SMSFROMDATE + '/' + cast(DATEPART(yyyy, getdate())as varchar)),103) AS SMSFROMDATE,
      convert(date,(SMSTODATE + '/' + cast(DATEPART(yyyy, getdate())as varchar)),103) AS SMSTODATE
     FROM SMSRoadMap_Master
    )
   SELECT * FROM CTE WHERE GETDATE() BETWEEN SMSFROMDATE AND SMSTODATE