在SQL字符串中查找特定的子字符串

时间:2015-03-10 19:31:56

标签: sql substring space charindex

我正在尝试找到一些SQL代码并且它似乎没有返回我想要的输出。

这是我的创建/插入语句

CREATE TABLE temp
    ([screenName] varchar(130), [realName] varchar(57))
;

INSERT INTO temp
    ([screenName], [realName])
VALUES
    ('WillyWonka', 'Will Stinson'),
    ('Barbara Smith', 'Barbara Smith'),
    ('JoanOfArc', 'JoanArcadia'),
    ('LisaD', 'Lisa Diddle')
;

我正在寻找的是realName列中有空格的行...例如前两行和第四行...而realName是空格后的第二个单词以字母开头' S'然后是任何字符,然后是字母i,后跟任何一系列字符。这就是我被困住的地方。

  SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S%'

虽然我很清楚我在做什么但是错了,但无法弄清楚如何使其正确。

对更改道歉 - 但如果名称要更改并且可能有多个空格(Jimmy Dean Stinson),我将如何更改代码?如果我想修改它以从右侧看?

谢谢。

3 个答案:

答案 0 :(得分:0)

使用LIKE运算符。

SELECT *
FROM   temp
WHERE  realName LIKE '% S_i%' 

答案 1 :(得分:0)

你想要

吗?
 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where realName like '% S_i%'

wildcard single character

答案 2 :(得分:0)

名称的第二个单词,以s开头,后跟另一个字符,后跟i后跟任意数量的字符:

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S_i%'

下划线字符_是任何单个字符的外卡。

您可以找到更多通配符,以便与LIKE Here

一起使用

您可以这样做以避免索引错误。这种情况发生在没有空间的价值观上。我将%添加到类似的字符串中,这将确保名称后面跟一个空格,后跟你的条件。

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where realName like '% S_i%'