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

Looking for a particular substring in SQL string

我试图找到一些 SQL 代码,但似乎没有返回我想要的输出。

这是我的create/insert声明

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 列中有 space 的行...例如前两行和第四行...以及 realName 后的第二个字space 以字母 'S' 开头,后跟任意字符,然后是字母 i,后跟任意字符系列。这就是我被困的地方。

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

虽然我很确定我在做什么是错的,但我不知道如何改正。

对更改表示歉意——但是如果名称要更改并且可能有多个 space (Jimmy Dean Stinson),我将如何更改代码如果我想修改它以从正确的?

谢谢。

使用 LIKE 运算符。

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

你要吗

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

wildcard single character

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

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

下划线字符 _ 是任何单个字符的通配符。

您可以找到更多用于 LIKE Here

的通配符

您可以这样做以避免索引错误。这发生在没有 space 的值上。我将 % 添加到类似的字符串中,这将确保名称后跟 space,然后是您的条件。

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