SQl字符串在某些字段值没有空间的空间上拆分(解析)

SQl字符串在某些字段值没有空间的空间上拆分(解析),sql,sql-server-2008,Sql,Sql Server 2008,我一直在尝试拆分查询中的字符串值,以在新列中返回由两部分组成的邮政编码的第一部分。有些值仅包含第一部分,有些值同时包含两部分。经过一番搜索,我找到了以下代码: SELECT TblPLSSU.PLSSUPostcode ,SUBSTRING(TblPLSSU.PLSSUPostcode, 1, CHARINDEX(' ', TblPLSSU.PLSSUPostcode)) AS PCode FROM TblPostcodes 这很高兴地将包含两部分的值拆分为邮政编码,但似乎忽略了

我一直在尝试拆分查询中的字符串值,以在新列中返回由两部分组成的邮政编码的第一部分。有些值仅包含第一部分,有些值同时包含两部分。经过一番搜索,我找到了以下代码:

SELECT
  TblPLSSU.PLSSUPostcode  
  ,SUBSTRING(TblPLSSU.PLSSUPostcode, 1, CHARINDEX(' ', TblPLSSU.PLSSUPostcode)) AS PCode
FROM 
TblPostcodes
这很高兴地将包含两部分的值拆分为邮政编码,但似乎忽略了单个部分的邮政编码

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

EH1 1AB 
EH2
我想返回值

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

谢谢
EIL

也使用
案例

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

当邮政编码没有空格分隔值时,使用
case
按原样提取邮政编码

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

使用
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

谢谢你的快速回复。我仍然在用这个代码获取包含两个部分的邮政编码的值。谢谢-这个代码上是否缺少(一个?试图找出它应该去哪里…我看不到一个。你是否尝试了这个答案?谢谢。上面的答案很有效,但我会仔细看看stuff函数,因为它看起来在将来可能会有用。