按空格分割字符串

12

我想使用字符串分割的结果作为SQL条件来筛选表中只包含一个单词的记录。

例如,如果表中有像'ABC DEF','XYZ','EGF HIJ'这样的值,我只希望得到'XYZ'作为结果。

我不确定应该使用什么方法,在列中拆分每个值可能是一种方法,但不确定如何将其用作条件。

我已经查看了一些拆分示例,例如以下内容:

DECLARE @Str VARCHAR(100) ='Test Word'

SELECT SUBSTRING(@Str , 1, CHARINDEX(' ', @Str ) - 1) AS [First],
       SUBSTRING(@Str , CHARINDEX(' ', @Str ) + 1, LEN(@Str )) AS [Last]

这个答案可能会对你有所帮助(如果你坚持使用“字符串拆分”方法):https://dev59.com/XFfUa4cB1Zd3GeqPLtIG - rsenna
@tEsTA与这个问题无关(就我所知)。 - Hogan
@Hogan:“我不确定在这里使用什么,但是将列中的每个值拆分将是一种方法。”因此,我同意它不是必需的,但它确实与这个问题有某些关系(这是解决它的一种可能方式,即使很麻烦)。 - rsenna
@Hogan:顺便说一下,“tokenize”的意思就是这个。 - rsenna
1
请不要嘲讽,特别是当您错了的时候。这不是tokenize的意思。考虑一下这个字符串:"1+1=2",这里的tokens与空格无关。 - Hogan
这个问题需要被点踩吗? - huMpty duMpty
3个回答

9
只需在包含“XYZ”的列中获取“XYZ”。
tableName.fieldName
'ABC DEF'
'XYZ'
'EGF HIJ' 

请执行此操作

SELECT * 
FROM tableName
WHERE CHARINDEX(' ',fieldname) = 0

1
这不应该是CHARINDEX(' ',fieldname) = 0吗? - OTTA
使用 WHERE CHARINDEX(' ',ltrim(rtrim(fieldname))) = 0,这个方法很好用! - huMpty duMpty
@huMptyduMpty - 你懂的。=0会给你一个单词的项目,>0会给你两个单词的项目——是的,如果你有前导或尾随空格,那么它们需要被移除。 - Hogan

6

这也是工作

select SUBSTRING(EmpName,0,CHARINDEX(' ',EmpName)),SUBSTRING(EmpName,CHARINDEX(' ',EmpName),LEN(EMPNAME)) 
from tblemployee

3

这应该可以运行:

DECLARE @table TABLE (string VARCHAR(20))
INSERT @table VALUES ('ABC DEF')
INSERT @table VALUES ('XYZ')
INSERT @table VALUES ('EGF HIJ')

SELECT * FROM @table
WHERE CHARINDEX(' ', string) = 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接