t-sql变化'=';至'&燃气轮机;或<';在案例陈述中
这是一个大问题的一部分 我想做的是,如果变量t-sql变化'=';至'&燃气轮机;或<';在案例陈述中,sql,sql-server,tsql,Sql,Sql Server,Tsql,这是一个大问题的一部分 我想做的是,如果变量@exemptionStartDate='1900-01-01',那么只需选择所有内容 例如,ce.ExemptionStartDate=ce.ExemptionStartDate 否则,我只需要ce.ExemptionStartDate>@ExemptionStartDate ce.ExcemptionStartDate为日期时间值 SELECT foobar WHERE foo = bar AND ce.ExemptionStartDate =
@exemptionStartDate='1900-01-01'
,那么只需选择所有内容
例如,ce.ExemptionStartDate=ce.ExemptionStartDate
否则,我只需要ce.ExemptionStartDate>@ExemptionStartDate
ce.ExcemptionStartDate为日期时间值
SELECT foobar
WHERE foo = bar
AND ce.ExemptionStartDate = CASE WHEN @exemptionStartDate = '1900-01-01' THEN ce.ExemptionStartDate ELSE (> @exemptionStartDate) END
可能吗?或者我必须做一件骇人听闻的事情,把所有的东西都做成一根长字符串,然后根据需要添加到它上面
我得到一个语法错误,不知道如何形成这样的东西。您需要在案例中包括该列:
更新此查询将起作用:
AND (@exemptionStartDate = '1900-01-01'
OR ce.ExemptionStartDate > @exemptionStartDate)
请参阅cyberwiki关于如何使用
案例的答案假设表中的所有豁免开始日期值都大于1900-01-01是否可以保存
如果是这样,您可以简化为:
...
WHERE foo = bar
AND ce.ExemptionStartDate > @exemptionStartDate
不需要把事情复杂化
if @exemptionStartDate = '1900-01-01'
set @exemptionStartDate = '1753-01-01' --lowest date for datetime
然后就是
where ce.ExemptionStartDate > @exemptionStartDate
你的问题应该是
SELECT foobar
WHERE foo = bar
AND (@exemptionStartDate = 0 OR ce.ExemptionStartDate > @exemptionStartDate)
如果你想要一个案例陈述,这里有一个逻辑技巧
SELECT foobar
WHERE foo = bar
AND ce.ExemptionStartDate >
CASE
WHEN @exemptionStartDate = 0 THEN ce.ExemptionStartDate-1
ELSE ce.ExemptionStartDate
END
它看起来很整洁,但是它不会对你的查询有任何帮助。坚持最上面的那个。第一个和第二个的区别在于,第二个不会显示任何null
ce.ExemptionStartDate记录。@Richard:OP的ce.ExemptionStartDate=ce.ExemptionStartDate
,因此假设该列不包含空值似乎是合理的。虽然我认为OP在“可选筛选”,其一般技术是使用@var为null
或@var={marker}
短路求值,而不必检查索引范围。@Richard一个有效点re:检查null,但我相信执行计划生成器将自动重新安排,以便在可能的情况下短路。@Richard:如前所述,该技术(@var为null或@var={marker}
)通常不是很好的。@Basicdatetime>=0
实际上需要查阅索引,因为datetime可以转到-ve值。SQL Server不允许常设布尔表达式。请尝试以下操作:在1=1时选择CASE,然后选择1=2,否则选择1=3 END
=>错误。CASE语句必须返回某个值,并且(true)布尔值不是有效的数据类型。@richard aka cyberkiwi感谢您指出这一点。(但在MySql中它是有效的)哇,我真傻,谢谢。最简单的答案就是最好的!不过我也在寻找案例陈述的解决方案,因为我经常使用它,有时会遇到这样的情况,我会让所有的东西都变成红色文本…很有趣。你介意解释一下这两者是如何工作的吗(与0混淆)?你为什么要使用零(0)?或者这仅仅是一个例子?@Fritos-选择convert(datetime,0)=>“1900-01-01”。这是数字等价物,因为datetime值无论如何都会解析为一些数字表示形式。