【问题标题】:selecting the correct letter from a string从字符串中选择正确的字母
【发布时间】:2016-09-27 17:56:26
【问题描述】:
CREATE TABLE #tmpTbl (m VARCHAR(100))  
INSERT INTO #tmpTbl VALUES
 (',[Undergraduate1]')    
,(',[Undergraduate10]')   
,(',[Undergraduate11]')   
;
GO

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
         SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)) as b from #tmpTbl


drop table #tmpTbl

你好,上面的 tmptable 和 select 语句,结果如下。

           a            |      b
-------------------------------------------------------
    ,[Undergraduate     |      1]
    ,[Undergraduate     |      10]
    ,[Undergraduate     |      11]

但是我希望它是这样的。

           a            |      b
-------------------------------------------------------
    ,[Undergraduate     |      1
    ,[Undergraduate     |      10
    ,[Undergraduate     |      11

我怎样才能做到这一点?我尝试了很多与 PATINDEX、LEFT、RIGHT、SUBSTRING、LEN 的组合。但无法获得 B 列中的 ]

【问题讨论】:

  • SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m) - 1) ?

标签: sql sql-server tsql substring patindex


【解决方案1】:

您可以使用替换来删除]。狡猾,但它实现了你想要的

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
     REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)),']','') as b from #tmpTbl

alternative: 反转字符串,去除第一个字符的子串,反转回来

select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
         REVERSE(SUBSTRING(REVERSE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m))),2,LEN(M))) as b from #tmpTbl

【讨论】:

    【解决方案2】:

    您可以使用REPLACE] 替换为''

    select LEFT(m, PATINDEX('%[0-9]%', m)-1) as a,
             REPLACE(SUBSTRING(m, PATINDEX('%[0-9]%', m), LEN(m)), ']', '') as b from #tmpTbl
    

    【讨论】:

      【解决方案3】:

      我倾向于为此使用stuff()

      select replace(stuff(m, 1, patindex(m, '%[0-9]%'), ''), ']', '')
      

      【讨论】:

        【解决方案4】:

        这是一种替代方法,可以去除任何文本,只留下数字。

        SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1) 
        FROM (
            SELECT subsrt = SUBSTRING(m, pos, LEN(m))
            FROM (
                SELECT m, pos = PATINDEX('%[0-9]%', m)
                FROM #tmpTbl
            ) d
        ) t
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-01
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-29
          • 2016-04-24
          相关资源
          最近更新 更多