【问题标题】:Looking for a particular substring in SQL string在 SQL 字符串中查找特定的子字符串
【发布时间】:2015-03-10 19:31:55
【问题描述】:

我正在尝试查找一些 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),我将如何更改代码如果我想将其修改为从右侧查看?

谢谢。

【问题讨论】:

    标签: sql substring space charindex


    【解决方案1】:

    使用LIKE 运算符。

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

    【讨论】:

    • 但是如果我使用 like 它会给我任何 S_i 的组合,我只需要它在人的姓氏/姓氏中。就像 Skid Patington 一样,即使他的名字是 S_i,也不应该返回。这也适用。
    • @Elizabeth 为什么Skid Patington 应该被拒绝?
    • 如果我之前不清楚,我深表歉意 - 因为我们正在寻找应该显示为 'S_i%' 的空格之后的姓氏
    • @Elizabeth - 现在更新检查
    • 我将 where 更改为 '% %S_i%' 我们一个字符的通配符,它​​起作用了。谢谢。
    【解决方案2】:

    你想要吗

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

    wildcard single character

    【讨论】:

      【解决方案3】:

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

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

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

      您可以找到更多用于LIKE Here 的通配符

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

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

      【讨论】:

      • 我收到此错误消息:传递给 LEFT 或 SUBSTRING 函数的长度参数无效。
      • 这发生在没有空格的值上。我对我的答案进行了编辑,以展示另一种不应该出现该错误的处理方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2015-08-31
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      相关资源
      最近更新 更多