Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
t-sql变化'=';至'&燃气轮机;或<';在案例陈述中_Sql_Sql Server_Tsql - Fatal编程技术网

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}
)通常不是很好的。@Basic
datetime>=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值无论如何都会解析为一些数字表示形式。