SQl字符串拆分(解析)空间,其中某些字段值没有空格

时间:2015-12-15 15:20:02

标签: sql sql-server-2008

我一直在尝试在查询中拆分字符串值,以便在新列中返回两部分邮政编码的第一部分。有些值只有第一部分,有些有两者。经过一番搜索,我发现了这段代码:

SELECT
  TblPLSSU.PLSSUPostcode  
  ,SUBSTRING(TblPLSSU.PLSSUPostcode, 1, CHARINDEX(' ', TblPLSSU.PLSSUPostcode)) AS PCode
FROM 
TblPostcodes

这很愉快地将具有两个部分的值拆分为邮政编码,但似乎忽略了单个部分邮政编码。

例如,TblPLSSU.PLSSUPostcode的值可能是:

EH1 1AB 
EH2

我想返回值

EH1 
EH2

但是上面的代码我只得到了EH1

由于 EILS

3 个答案:

答案 0 :(得分:1)

同时使用case

SELECT TblPLSSU.PLSSUPostcode, 
       (CASE WHEN TblPLSSU.PLSSUPostcode LIKE '% %'
             THEN SUBSTRING(TblPLSSU.PLSSUPostcode, 1, CHARINDEX(' ', TblPLSSU.PLSSUPostcode)) 
        END) AS PCode
FROM . . .

答案 1 :(得分:1)

当他们没有空格分隔值时,使用case按照原样接收邮政编码。

SELECT
PLSSUPostcode  
,case when CHARINDEX(' ', PLSSUPostcode) > 0 
 then SUBSTRING(PLSSUPostcode, 1, CHARINDEX(' ', PLSSUPostcode))
else PLSSUPostcode end AS PCode
FROM 
TblPostcodes

答案 2 :(得分:1)

使用STUFF函数的小技巧。这是因为CHARINDEX返回第一次出现的索引。所以你只是在字符串中添加空格并用空字符串替换第一次出现到结尾的所有符号:

DECLARE @t TABLE(v VARCHAR(20))
INSERT INTO @t VALUES('EH1 1AB'), ('EH2')

SELECT STUFF(v + ' ', CHARINDEX(' ', v + ' '), LEN(v), '')
FROM @t

另一个版本:

SELECT SUBSTRING(v + ' ', 1, CHARINDEX(' ', v + ' ') - 1)
FROM @t

输出:

EH1
EH2