签入多个列以查看范围日期

时间:2014-06-09 17:32:17

标签: sql sql-server-2008

我有3个表,其中一列名为created,类型为日期时间。

我正在寻找一种方法来检查所有3个创建的日期列(今天和今天-7之间),如果找到日期,如果没有,结果应为1,0。

SQL FIDDLE是我迄今为止所拥有的。它应该返回1,但它返回0,而不是。

SELECT
  CASE
    WHEN(
          (
            table1.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() AND
            table2.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE() AND
            table3.created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE()
          )
        )
    THEN
      1
    ELSE
      0
    END AS FLAG
FROM
  table1,
  table2,
  table3
WHERE
  table1.cond1= 'A' and
  table2.cond1= 'A' and
  table3.cond1= 'A'

3 个答案:

答案 0 :(得分:3)

DATEDIFF更改为DATEADD,将7更改为-7,将AND更改为OR

SELECT
  CASE
    WHEN(
          (
            table1.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() OR
            table2.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE() OR
            table3.created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE()
          )
        )
    THEN
      1
    ELSE
      0
    END AS FLAG
FROM
  table1,
  table2,
  table3
WHERE
  table1.cond1= 'A' and
  table2.cond1= 'A' and
  table3.cond1= 'A'

SQLFiddle

答案 1 :(得分:1)

在SQL中,“今天 - 7”是DATEADD(dd, -7, GETDATE())。你有什么,DATEDIFF(dd, 7, GETDATE())是第7天和今天之间的差异,用天来衡量。

答案 2 :(得分:1)

要检查表格是否有符合特定条件的行,您可以使用EXISTS predicate

SELECT
  CASE
    WHEN EXISTS (SELECT *  -- syntactically, the select list is disregarded here
                           -- meaning you can replace the "*" with anything else
                 FROM tablename
                 WHERE ...
                )
    THEN 1
    ELSE 0
  END
-- no FROM clause in the main SELECT
;

如果要同时检查多个表,请创建几个谓词,如下所示:

SELECT
  CASE
    WHEN EXISTS (SELECT * FROM table1 WHERE ...)
     AND EXISTS (SELECT * FROM table2 WHERE ...)
     AND EXISTS (SELECT * FROM table3 WHERE ...)
    THEN 1
    ELSE 0
  END
;

最后,其他回答者所说的内容也适用,即您应该考虑更改日期检查条件

created BETWEEN DATEDIFF(dd, 7, GETDATE()) AND GETDATE()

created BETWEEN DATEADD(dd, -7, GETDATE()) AND GETDATE()

原始表单在您的情况下也会起作用,但它依赖于intdatetime的隐式转换,这不是一个好习惯,如果您更改{{1从created到其中一种较新的类型,datetimedatetime2或者datetimeoffset