[英]“CASE” statement within “WHERE” clause in SQL Server 2012
我有一个这样的选择声明
select x, y , z from table a
where CAST( CAST(DATEColumn AS VARCHAR) AS DATE) between
case when a.columnx = '1900-01-01' then CAST( CAST(DATEColumn AS VARCHAR) AS DATE) else c.columnx end
and cast( c.CustomerShipToRecTrmDt as date)
如果我对日期进行硬编码,为什么此case语句不起作用,而case语句却起作用?
您将日期列强制转换为varchar
然后返回date
什么? 我认为这可以满足您的需求:
select x, y , z
rom table a
where DATEColumn between
(case when a.columnx = '1900-01-01' then DATEColumn else cast(c.columnx as date) end and
cast( c.CustomerShipToRecTrmDt as date)
您可以通过执行以下操作从where
子句中删除case
语句:
where DATEColumn >= cast(c.columnx as date) and DateColumns <= cast( c.CustomerShipToRecTrmDt as date)
与1900-01-01
的比较不会影响>=
部分,除非您使用的是1900年以前的日期(我想这不太可能)。
同样,每当将值强制转换为varchar()
,始终包括长度(如varchar(255)
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.