【问题标题】:Split string by space按空格分割字符串
【发布时间】:2013-10-11 15:03:38
【问题描述】:

我正在尝试使用字符串拆分到我的 sql 条件中接近的位置的结果

我有一个有varchar 列的表。我正在尝试过滤只显示一个单词的结果。

例如。如果表有 '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]

【问题讨论】:

  • 这个答案可以帮助你(如果你坚持走“字符串拆分”路径):stackoverflow.com/questions/6209658/…
  • @tEsTA 与这个问题无关(据我所知)
  • @Hogan:“我不确定在这里使用什么,尽管拆分列中的每个值都是一种方式”。所以我同意不是需要,但它确实与这个问题有一些有关(这是一种可能的解决方法,即使很麻烦)。
  • @Hogan:顺便说一句,这就是“tokenize”的意思。
  • 无需讽刺,尤其是。当你错了。这不是标记化的意思。考虑这个字符串:“1+1=2”这里的标记与空格无关。

标签: sql sql-server-2008 split


【解决方案1】:

在包含

的列中仅获取 'XYZ'
tableName.fieldName
'ABC DEF'
'XYZ'
'EGF HIJ' 

这样做

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

【讨论】:

  • 不应该是CHARINDEX(' ',fieldname) = 0吗?
  • 使用WHERE CHARINDEX(' ',ltrim(rtrim(fieldname))) = 0 效果很好!
  • @huMptyduMpty - 你明白了。 =0 会给你一个单词的项目,>0 会给你两个单词的项目——是的,如果你有前导或尾随空格,则需要删除。
【解决方案2】:

这应该可行:

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

【讨论】:

    【解决方案3】:

    这也是可行的

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

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多