在SQL字符串中查找特定的子字符串
我试图找到一些SQL代码,但它似乎并没有返回我想要的输出 这是我的create/insert语句在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
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函数的长度参数无效。这发生在没有空格的值上。我对我的答案进行了编辑,以显示另一种不应该出现错误的处理方法。