我有一个很长的查询,其中一部分基于@Amount
参数。
如果@Amount
为空,那么任何金额的结果都应该出现,否则只会导致其中一个金额大于@Amount
参数的结果。
@Amount varchar(20)= NULL
SELECT .....
Format(T1.Amount,'c','en-us') as Amount1, format(T2.Amount, 'c', 'en-us') as Amount2
FROM Table1
WHERE .....
and ((@Amount is null) or (Cast(T1.Amount as varchar)>= @Amount) or (Cast(T2.Amount as varchar)>= @Amount))
这不能正常工作:
@Amount
参数不为空,则出现的结果金额小于@Amount
参数中指定的金额。@Amount
参数为null,则不会显示所有结果。我不确定我做错了什么,任何帮助都会受到赞赏。
答案 0 :(得分:1)
试试这个
WHERE .....
AND (
( T1.Amount>= CAST(@Amount AS INT)
OR T2.Amount >= CAST(@Amount AS INT)
)
AND @Amount IS NOT NULL)
)
如果@Amount
为NULL,则无需按数量进行过滤,因此请从WHERE子句中删除(@Amount is null)
。
仅当@Amount
没有NULL
值时才会进行过滤。
修改强>
如果T1.Amount和T2.Amount具有数值数据类型(INT,Decimal等),则通过转换为VARCHAR进行比较是不正确的。 Varchar 值1000小于900。