在JavaScript等语言中,您可以拥有2个条件语句,并使用第一个条件语句“保护”第二个条件语句。例如:
if( scarryObject != null && scarryObject.scarryMethod() ) { ... }
// if scarryObject is null scarryMethod will not be called
我以为我会在SQL中实现同样的目标:
where int_date > 19500101
and month(CONVERT(smalldatetime, ... int_date))
这里的问题是,如果int_date
是一些“坏”值,如-1,0,1,则转换将失败,sp将因错误而停止。我认为第一次检查int_date > 19500101
将首先进行评估,如果为假,则会跳过第二种情况。
看起来它不像这样......或者?还有其他方法吗?
谢谢!
答案 0 :(得分:1)
您的查询在语法上不正确,因为子句month(CONVERT....
不是条件。
假设您想要与某个数字进行比较,表达您想要的可能方式
SELECT *
FROM myTable
WHERE case
when int_date > 19500101
then -1
else month(CONVERT(smalldatetime, ... int_date))
end = @YourMonth
你会'保护'对'月'的评价,而不是条件。
答案 1 :(得分:-1)
您可以尝试将查询拆分为两个。这是概念:
SELECT *
FROM (
SELECT *
FROM myTable
WHERE int_date > 19500101
) t
WHERE month(CONVERT(smalldatetime, ... t.int_date))