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;