【问题标题】:Get substring until a specific character starting from right to left SQL获取子字符串,直到从右到左 SQL 开始的特定字符
【发布时间】:2015-06-09 06:46:09
【问题描述】:

我有一个字符串列,我需要在其中找到子字符串,直到找到第一个'-'。

示例列 ELOT-IGS-2。我需要得到“2”作为输出。 这些列来自一个表,所以我不能将变量声明为固定字符串。

我尝试了LOCATESUBSTRING_INDEX,但没有一个是内置函数。

我也试过RIGHT(ID_BETSLIP,CHARINDEX('-',ID_BETSLIP)-1),但是当我有2次“-”时这不起作用

有人有想法吗?

【问题讨论】:

  • 查看LINKLINK
  • 我可以声明一个来自表中列的变量吗?

标签: sql-server tsql


【解决方案1】:
select RIGHT(<your Field>, CHARINDEX('-',REVERSE(<your Field>))-1)

【讨论】:

    【解决方案2】:
    DECLARE @t varchar(20) = 'ELOT-IGS-2'
    select REVERSE(SUBSTRING(reverse(@t),0,CHARINDEX ('-',REVERSE(@t))))
    

    【讨论】:

    • 几乎是男人!我得到列 PIK3-99701 作为输出“10799”。有什么办法解决这个问题?
    • Igor 发布了一些有效但删除了他的帖子。SUBSTRING(ID_BETSLIP, LEN(ID_BETSLIP) - CHARINDEX('-', REVERSE(ID_BETSLIP))+2, len(ID_BETSLIP)) 作为测试跨度>
    【解决方案3】:

    最简单的就是

    select SUBSTRING(reverse(ELOT-IGS-2),0,charindex('-',reverse(ELOT-IGS-2)))
    

    【讨论】:

      【解决方案4】:
      1. 基于@mohan111 的解决方案,您可以添加REVERSE 以获得您需要的东西

        DECLARE @t varchar(20) = 'ELOT-IGS-2'
        select REVERSE(SUBSTRING(reverse(@t),0,CHARINDEX ('-',REVERSE(@t))))
        

        一旦你得到@mohan111 的解决方案,你就应该自己做这件事!为了你自己的改进,你不能要求一切:-(一旦你得到了一个几乎是你需要的解决方案,是时候尝试自己改进它了。请检查this MSDN page,每次你需要解析一个字符串,从这里开始 :-) 尝试检查函数,也许你会找到解决方案。

      2. REVERSE 查询和大多数字符串解析函数在 SQL Server 中都不是很好的解决方案,大多数情况下最好使用 SQLCLR 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-28
        • 1970-01-01
        • 2022-01-13
        • 2012-07-18
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多