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

Sql 在where子句中使用substring函数时处理NULL,sql,sql-server-2008,substring,Sql,Sql Server 2008,Substring,我必须对照Col2(部分somestringpart)和Col3(部分somesotherstringpart)检查Col1的内容,它的值类似于somestring(somesotherstring)。Col2的长度始终为10个字符。Col1具有空值 这就是我现在拥有的: select * from MyTable where substring(Col1,1,10) != Col2 OR substring(Col1,13,LEN(Col1)-13) != Col3 我得到了一个错误: 传递

我必须对照Col2(部分
somestring
part)和Col3(部分
somesotherstring
part)检查Col1的内容,它的值类似于
somestring(somesotherstring)
。Col2的长度始终为10个字符。Col1具有空值

这就是我现在拥有的:

select * from MyTable
where
substring(Col1,1,10) != Col2
OR substring(Col1,13,LEN(Col1)-13) != Col3
我得到了一个错误:

传递给LEFT或SUBSTRING函数的长度参数无效。


我猜Col1中的空值是我的问题。我尝试过ISNULL和COALESCE,但仍然不起作用。我一定是做错了什么。如何解决此问题?

我认为您的问题是
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

我认为您的问题是
LEN(Col1)-13
返回一个负数您可以显示一些示例数据吗?您使用的是哪种DBMS?神谕Postgres?@a_horse_没有名字SQL Server 2008