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

在SQL字符串中查找特定的子字符串,sql,substring,space,charindex,Sql,Substring,Space,Charindex,我试图找到一些SQL代码,但它似乎并没有返回我想要的输出 这是我的create/insert语句 CREATE TABLE temp ([screenName] varchar(130), [realName] varchar(57)) ; INSERT INTO temp ([screenName], [realName]) VALUES ('WillyWonka', 'Will Stinson'), ('Barbara Smith', 'Barbara Sm

我试图找到一些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列中有空格的行。。。例如前两行和第四行。。。而实名是空格后的第二个字,以字母“S”开头,后面跟任何字符,然后是字母i,后面跟任何一系列字符。这就是我被困的地方

  SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S%'
虽然我很确定我所做的是错误的,但我不知道如何纠正它

对更改表示歉意--但是如果名称发生更改,并且如果我想将其修改为从右侧看,可能有多个空格(
Jimmy Dean Stinson
),我将如何更改代码


多谢各位

使用
类似的
操作符

SELECT *
FROM   temp
WHERE  realName LIKE '% S_i%' 
你想要什么

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

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

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S_i%'
下划线字符
\uu
是任何单个字符的通配符

您可以找到更多与
一起使用的通配符,如


您可以这样做以避免索引错误。这发生在没有空间的值上。我在like字符串中添加了
%
,这将确保名称后面有空格,后面是您的条件

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

但是,如果我使用like,它会给我任何s_的组合,我只需要它在这个人的最后/姓氏中。就像斯基德·帕丁顿一样,即使他的名字是S_i,也不应该被归还。这也会起作用。@Elizabeth为什么要拒绝Skid Patington?如果我之前不清楚,我表示歉意-因为我们在应该读为“S_i%”的空格后查找姓氏@Elizabeth-更新了“立即检查”我将where改为“%%S_i%”给我们一个字符的通配符,结果成功了。谢谢。我收到这个错误消息:传递给LEFT或SUBSTRING函数的长度参数无效。这发生在没有空格的值上。我对我的答案进行了编辑,以显示另一种不应该出现错误的处理方法。