Sql server 获取子字符串,直到特定字符从右向左开始

Sql server 获取子字符串,直到特定字符从右向左开始,sql-server,tsql,Sql Server,Tsql,我有一个字符串列,需要在其中查找子字符串,直到找到第一个“-” 示例列ELOT-IGS-2。我需要得到“2”作为输出。 这些列来自一个表,因此我不能将变量声明为固定字符串 我尝试了LOCATE,SUBSTRING\u INDEX,但都不是内置函数 我还尝试了对(ID_BETSLIP,CHARINDEX('-',ID_BETSLIP)-1)但当我有2次“-”时,这不起作用 有人有主意吗 DECLARE @t varchar(20) = 'ELOT-IGS-2' select REVERSE(SUB

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

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

我尝试了
LOCATE
SUBSTRING\u INDEX
,但都不是内置函数

我还尝试了
对(ID_BETSLIP,CHARINDEX('-',ID_BETSLIP)-1)
但当我有2次“-”时,这不起作用

有人有主意吗

DECLARE @t varchar(20) = 'ELOT-IGS-2'
select REVERSE(SUBSTRING(reverse(@t),0,CHARINDEX ('-',REVERSE(@t))))
  • 在@mohan111解决方案的基础上,您可以添加反向,以获得所需的内容

    声明@t varchar(20)=“ELOT-IGS-2” 选择反向(子字符串(反向(@t)、0、CHARINDEX('-',反向(@t)))

    • 一旦你得到@mohan111解决方案,你就应该自己做这件事!对于您自己的改进,您不能要求一切:-(一旦您得到了一个几乎满足您需要的解决方案,现在是您自己尝试改进它的时候了。请检查此URL,每次您需要解析字符串时,从这里开始:-)试着检查函数,也许您会找到解决方案。
  • 在SQLServer中,反向查询和most字符串解析函数不是很好的解决方案,在大多数情况下,最好使用SQLCLR函数来实现这一点

  • 在@mohan111解决方案的基础上,您可以添加反向,以获得所需的内容

    声明@t varchar(20)=“ELOT-IGS-2” 选择反向(子字符串(反向(@t)、0、CHARINDEX('-',反向(@t)))

    • 一旦你得到@mohan111解决方案,你就应该自己做这件事!对于您自己的改进,您不能要求一切:-(一旦您得到了一个几乎满足您需要的解决方案,现在是您自己尝试改进它的时候了。请检查此URL,每次您需要解析字符串时,从这里开始:-)试着检查函数,也许您会找到解决方案。
  • 在SQLServer中,反向查询和most字符串解析函数不是很好的解决方案,在大多数情况下,最好使用SQLCLR函数来实现这一点

  • 最简单的是

    select SUBSTRING(reverse(ELOT-IGS-2),0,charindex('-',reverse(ELOT-IGS-2)))
    
    最简单的是

    select SUBSTRING(reverse(ELOT-IGS-2),0,charindex('-',reverse(ELOT-IGS-2)))
    
    select RIGHT(,CHARINDEX('-',REVERSE())-1)
    
    选择右(,CHARINDEX('-',REVERSE())-1)
    
    检查此项或此项我可以声明来自表中某列的变量吗?检查此项或此项我可以声明来自表中某列的变量吗?几乎是人!我得到PIK3-99701列作为输出“10799”。有没有办法解决这个问题?伊戈尔发布了一些有用的东西,但删除了他的帖子。子串(ID_-BETSLIP,LEN(ID_-BETSLIP)-CHARINDEX('-',反向(ID_-BETSLIP))+2,LEN(ID_-BETSLIP))作为测试者!我得到PIK3-99701列作为输出“10799”。有没有办法解决这个问题?伊戈尔发布了一些有用的东西,但删除了他的帖子。子字符串(ID_BETSLIP,LEN(ID_BETSLIP)-CHARINDEX('-',反向(ID_BETSLIP))+2,LEN(ID_BETSLIP))作为测试