我已经看过其中一些问题,但没有发现一个有帮助的问题!我只想选择邮政编码的第一部分,基本上忽略了空格后的任何内容。我正在使用的代码是
SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode ) -1)
但是我得到传递给LEFT或SUBSTRING函数的无效长度参数!没有空值或空白但有一些只有第一部分。这是导致错误的原因,如果是这样的话,是什么工作?!
答案 0 :(得分:29)
只有在PostCode
缺少空格时才会发生这种情况。
您可以添加条件,以便在找不到如下空格时检索所有PostCode
select SUBSTRING(PostCode, 1 ,
case when CHARINDEX(' ', PostCode ) = 0 then LEN(PostCode)
else CHARINDEX(' ', PostCode) -1 end)
答案 1 :(得分:15)
CHARINDEX
将返回0
,然后您会查找-1
长度的子字符串。
您可以在字符串末尾添加尾随空格,以确保始终至少有一个空格并避免此问题。
SELECT SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode + ' ' ) -1)
答案 2 :(得分:7)
这是因为 CHARINDEX-1 在查找"时会返回-ive值。 " (空格)是0.最简单的解决方案是避免' -ve '通过添加
ABS(CHARINDEX(' ', PostCode ) -1))
即使CHARINDEX(' ', PostCode ) -1)
是-ve值,也只返回长度的+ ive值。如果我错了,请纠正我!
答案 3 :(得分:0)
您还可以使用isnull
:
isnull( SUBSTRING(PostCode, 1 , CHARINDEX(' ', PostCode ) -1), PostCode)