Sql Server日期查询不工作

Sql Server日期查询不工作,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个查询,如下所示。但是,当我运行此查询时,我会得到[date_effective]早于2014年2月14日的行。为什么?我有1980年1月1日的日期出现 SELECT * FROM D_CORPACTIONS_MSCI WHERE [date_effective] >= '14 February 2014' AND [ca_status] = 'EXPECTED' OR [ca_status] = 'CONFIRMED' O

我有一个查询,如下所示。但是,当我运行此查询时,我会得到[date_effective]早于2014年2月14日的行。为什么?我有1980年1月1日的日期出现

  SELECT * 
    FROM D_CORPACTIONS_MSCI
   WHERE [date_effective] >= '14 February 2014' 
     AND [ca_status] = 'EXPECTED' 
      OR [ca_status] = 'CONFIRMED' 
      OR [ca_status] = 'UNDETERMINED'
ORDER BY [date_effective]

您的
相互冲突

因此,匹配的行不正确

尝试封装
语句,或者在这种情况下,在中使用

select *
from   d_corpactions_msci
where  date_effective >= '14 february 2014'
and    ca_status in ('EXPECTED', 'CONFIRMED', 'UNDETERMINED')
order
by     date_effective
此外,不要通过转换日期来依赖客户端或服务器上的日期格式:

where  date_effective >= convert(datetime, '20140214', 112)

您的
相互冲突

因此,匹配的行不正确

尝试封装
语句,或者在这种情况下,在
中使用

select *
from   d_corpactions_msci
where  date_effective >= '14 february 2014'
and    ca_status in ('EXPECTED', 'CONFIRMED', 'UNDETERMINED')
order
by     date_effective
此外,不要通过转换日期来依赖客户端或服务器上的日期格式:

where  date_effective >= convert(datetime, '20140214', 112)

帕特里克·霍夫曼和卡西夫——他们已经回答了你的问题

您还可以使用UNION ALL

SELECT * 
    FROM D_CORPACTIONS_MSCI
    WHERE ([date_effective] >= '14 February 2014') 
    AND [ca_status] = 'EXPECTED' 
UNION ALL
    SELECT * 
    FROM D_CORPACTIONS_MSCI
    WHERE ([date_effective] >= '14 February 2014') 
    AND [ca_status] = 'CONFIRMED' 
UNION ALL
    SELECT * 
    FROM D_CORPACTIONS_MSCI
    WHERE ([date_effective] >= '14 February 2014') 
    AND [ca_status] = 'UNDETERMINED')
ORDER BY [date_effective] 
UNION ALL
的性能优于

比较–“或”与“联合所有”我的理解如下:

  • “OR”版本查询有两个运算符(steam聚合和合并联接),而“UNION ALL”版本只有连接运算符
  • “或”版本查询的基数估计不准确
  • “UNION ALL”查询的子树成本远低于“OR”版本

  • 帕特里克·霍夫曼和卡西夫——他们已经回答了你的问题

    您还可以使用UNION ALL

    SELECT * 
        FROM D_CORPACTIONS_MSCI
        WHERE ([date_effective] >= '14 February 2014') 
        AND [ca_status] = 'EXPECTED' 
    UNION ALL
        SELECT * 
        FROM D_CORPACTIONS_MSCI
        WHERE ([date_effective] >= '14 February 2014') 
        AND [ca_status] = 'CONFIRMED' 
    UNION ALL
        SELECT * 
        FROM D_CORPACTIONS_MSCI
        WHERE ([date_effective] >= '14 February 2014') 
        AND [ca_status] = 'UNDETERMINED')
    ORDER BY [date_effective] 
    
    UNION ALL
    的性能优于

    比较–“或”与“联合所有”我的理解如下:

  • “OR”版本查询有两个运算符(steam聚合和合并联接),而“UNION ALL”版本只有连接运算符
  • “或”版本查询的基数估计不准确
  • “UNION ALL”查询的子树成本远低于“OR”版本

  • 基本上,你要问的是-给我的行,那-有
    date\u effect
    >=2014年2月14日,
    ca\u status
    'EXPECTED'
    和行,那-有
    ca\u status
    'confirm'
    'undeminated'
    ,无论它有什么
    日期生效,你要问的是-给我的行,那-有
    date\u effect
    >=2014年2月14日,
    ca\u status
    “预期的”
    和行,那-有
    ca\u status
    “确认的”
    “未确定的”
    ,无论它有什么
    日期
    有效。为什么这么多开销?嗨,帕特里克,我认为UNION ALL的表现优于或比较—“或”与“UNION ALL”,我的理解如下:1。“OR”版本查询有两个运算符(steam聚合和合并联接),而“UNION ALL”版本只有连接运算符。2.“或”版本查询的基数估计不准确。3.“UNION ALL”查询的子树成本远低于“OR”版本。来源:来源:这就是为什么您应该在
    中使用
    。为什么会有这么多开销?嗨,Patrick,我认为UNION ALL的性能优于或比较–“或”与“UNION ALL”我的理解如下:1。“OR”版本查询有两个运算符(steam聚合和合并联接),而“UNION ALL”版本只有连接运算符。2.“或”版本查询的基数估计不准确。3.“UNION ALL”查询的子树成本远低于“OR”版本。来源:来源:这就是为什么您应该在
    中使用