Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 大于一个日期且等于另一个日期_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 大于一个日期且等于另一个日期

Sql 大于一个日期且等于另一个日期,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我有一个表,其中表列为以下日期列数据 Date ---------- 1900-01-01 1900-01-01 1900-01-01 2013-07-25 2012-07-25 2012-07-25 2013-07-25 2012-07-25 2013-07-25 我可以写一个查询来过滤日期列,该列等于1900-01-01或大于2013-1-1吗 我可以写一个查询来过滤日期列,该列等于1900-01-01或大于2013-1-1 是的,你可以,这和你提出的问题差不多 像这样的事情应该可以

我有一个表,其中表列为以下日期列数据

   Date
----------
1900-01-01
1900-01-01
1900-01-01
2013-07-25
2012-07-25
2012-07-25
2013-07-25
2012-07-25
2013-07-25
我可以写一个查询来过滤日期列,该列等于1900-01-01或大于2013-1-1吗

我可以写一个查询来过滤日期列,该列等于1900-01-01或大于2013-1-1

是的,你可以,这和你提出的问题差不多

像这样的事情应该可以做到:

select something from my_table
where date = '1900-01-01'
   or date > '2013-01-01'
如果您的条件比这更复杂,您可以将该子句插入括号以保持其自包含性(没有优先规则会破坏您的整体条件):

试试这个

select data from Table where date=' 1900-01-01'
union all
select data from Table where date >'2013-1-1'

在SQL Server中,可以使用DATEDIFF函数来比较日期值

    SELECT col1,col2,.. FROM YourTable WHERE DATEDIFF(dd,date,'1900-01-01') = 0;

    UNION ALL 

    SELECT col1,col2,.. FROM YourTable WHERE DATEDIFF(dd,date,'2013-01-01') > 0;

你当然能做到。您已经想到了伪sql,只需将其转换为真正的sql脚本即可。干杯但如果我觉得在某些情况下它会失败。如果我在同一个查询中过滤这两个条件,我会得到不同的结果,以便在两个单独的查询中过滤并合并它们,那么您使用的是多个表?试着发布你的简化表结构。事实上,我有一个非常大的查询,我不想写两次。这就是为什么我想知道我是否可以只在一个过滤器中编写。谢谢你们的回复抱歉伙计们一切都很好!!你所有的答案都是正确的,但我刚才有另一个过滤查询正在播放。如果只有括号中的dates条件,那么它工作得很好。实际上,在这些条件中使用的唯一真正安全的字符串格式是'YYYYMMDD',这与直接版本没有区别,
其中t.dtCol='1900-01-01'或t.dtCol>'2014-05-23'
。。。除了一个例外:日期列现在是一个表达式,因此不能使用和覆盖索引。此外,使用
union all
不必要地使事情复杂化。
    SELECT col1,col2,.. FROM YourTable WHERE DATEDIFF(dd,date,'1900-01-01') = 0;

    UNION ALL 

    SELECT col1,col2,.. FROM YourTable WHERE DATEDIFF(dd,date,'2013-01-01') > 0;