在where子句中使用substring函数时处理NULL

时间:2013-12-05 10:27:59

标签: sql sql-server-2008 substring

我必须检查Col1的内容,其中somestring (someotherstring)的值与Col2(somestring部分)和Col3(someotherstring部分)相对应。 Col2总是10个字符长。 Col1具有NULL值。

这就是我现在所拥有的:

select * from MyTable
where
substring(Col1,1,10) != Col2
OR substring(Col1,13,LEN(Col1)-13) != Col3

我收到了错误:

Invalid length parameter passed to the LEFT or SUBSTRING function.

我猜测Col1中的空值是我的问题。我已经尝试过ISNULL和COALESCE,但它仍然没有用。我一定做错了什么。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您的问题是LEN(Col1) - 13返回负数

尝试使用:

select * from MyTable
where
substring(Col1,1,10) != Col2
OR substring(Col1,13,case when LEN(Col1)-13 >= 0 then LEN(Col1)-13 else 0 end) != Col3