我一直在尝试在查询中拆分字符串值,以便在新列中返回两部分邮政编码的第一部分。有些值只有第一部分,有些有两者。经过一番搜索,我发现了这段代码:
SELECT
TblPLSSU.PLSSUPostcode
,SUBSTRING(TblPLSSU.PLSSUPostcode, 1, CHARINDEX(' ', TblPLSSU.PLSSUPostcode)) AS PCode
FROM
TblPostcodes
这很愉快地将具有两个部分的值拆分为邮政编码,但似乎忽略了单个部分邮政编码。
例如,TblPLSSU.PLSSUPostcode的值可能是:
EH1 1AB
EH2
我想返回值
EH1
EH2
但是上面的代码我只得到了EH1
由于 EILS
答案 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