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