【问题标题】:SQL to find string in selectSQL在选择中查找字符串
【发布时间】:2011-02-08 09:36:44
【问题描述】:

我有一个这样的选择语句:

SELECT ColumnA,
CASE ColumnB = 'England' THEN ...

在 THEN 语句之后的部分,我想从 ColumnC 中获取数字,

例如ColumnC 值 = ABC 123 DEF,我需要 '123' 部分。

当“123”总是在字符串中仅有的两个空格之间时,有谁知道我可以在选择中使用的 sql 代码吗? (MS SQL)

【问题讨论】:

  • 提示您正在使用哪个 RDBMS 会很有帮助。咳咳。

标签: sql sql-server tsql case


【解决方案1】:

主要是需要使用ColumnC LIKE '% % %',这样在数据不包含两个空格的情况下才不会失败。

如果您的号码将少于 20 个字符,您可以使用它

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
   RTRIM(LEFT(REPLACE(STUFF(columnc, 1, PatIndex('% %', columnc), ''), ' ', REPLICATE(' ', 20)),20))
ELSE ....

或者你可以使用这个

SELECT ColumnA,
CASE WHEN ColumnB = 'England' AND ColumnC LIKE '% % %' THEN
    SUBSTRING(
        SUBSTRING(
            ColumnC,
            1,
            CHARINDEX(' ',ColumnC,CHARINDEX(' ', ColumnC)+1)-1),
        1+CHARINDEX(' ', ColumnC),
        LEN(ColumnC))
ELSE ....

【讨论】:

    【解决方案2】:

    您可以使用CHARINDEXSUBSTRING 的组合:

    DECLARE @Test TABLE(ColumnC varchar(100))
    INSERT @Test 
    VALUES ('ABC 123 DEF')
    
    SELECT SUBSTRING(ColumnC,
              CHARINDEX(' ', ColumnC) + 1, -- first space
              CHARINDEX(' ', ColumnC, CHARINDEX(' ', ColumnC) + 1)
                 - CHARINDEX(' ', ColumnC)) -- length from first to second space 
    FROM @Test
    

    这对提供的示例字符串按预期工作。

    【讨论】:

    • 这有一个赞成票,但我不能让它在我的身上工作......嗯还在玩它!
    • 你如何获得第二个空格的字符索引?你能解释一下吗?
    • @sachin - 通过传入可选的第三个参数,该参数给出搜索的开始位置。我传入前一个空格+1的位置。
    • Aaah ... 由于大量的 charIndexes 而错过了这一点.. ;)。感谢您的解释。 +1
    【解决方案3】:
    SUBSTRING_INDEX(SUBSTRING_INDEX( ColumnC , ' ', 2 ),' ',-1)
    

    【讨论】:

    • MS SQL 是否有 SUBSTRING_INDEX 的等价物??
    猜你喜欢
    • 2019-11-13
    • 2018-01-02
    • 2023-03-19
    • 1970-01-01
    • 2013-05-01
    • 2019-04-12
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多