SQL 选择字符后的所有内容
Posted
技术标签:
【中文标题】SQL 选择字符后的所有内容【英文标题】:SQL Select everything after character 【发布时间】:2016-12-22 18:24:13 【问题描述】:我想选择位于最右侧的某个字符 (-) 之后的所有内容。
例如。
abcd-efgh-XXXX
我想选择XXXX
部分
谢谢!
【问题讨论】:
在什么之前?右边是什么意思? 一切都从右边开始?就像最后 X 个字符一样? (其中 x 是一个静态数字)。还是从最后开始的一切?需要更多示例,或者更好地描述您正在寻找的内容。 如果XXXX
的长度相同,那么你可以使用right(column name,4)
抱歉,我已经编辑了问题。一切都到第一个 -,从右边开始。
你的意思是在最右边的某个字符之后?
【参考方案1】:
SQL Server Management Studio v15.0.18206.0 (18.4):
RIGHT([col], CHARINDEX('-', REVERSE([col]), -1))
【讨论】:
嘿梅拉克斯!欢迎来到堆栈溢出。您可能希望将 sql 查询包含在代码块中。【参考方案2】:select substr('Prueba,Prueba2',instr('Prueba,Prueba2',',') + 1) from dual
【讨论】:
instr
在我的 sql server 中是未知的。
很确定答案是针对 Oracle 的(基于 from dual)【参考方案3】:
@thegameiswar 有一个聪明的解决方案,因为我需要来自逗号分隔列表的结果。我没有 SQL 2016,所以我让它与用户定义的拆分函数一起使用。
;with cte
as
(
select
*,row_number() over (order by (select null)) as rownum
from database..[fn_SplitDelimitedList](@CommaDelimitedList,',')
)
select * from cte
order by rownum desc
【讨论】:
【参考方案4】:Using string split available from SQLServer 2016
;with cte
as
(
select
*,row_number() over (order by (select null)) as rownum
from string_split('abcd-efgh-XXXX','-')
)
select top 1 * from cte
order by rownum desc
【讨论】:
这是一个很好的概念。我在 SQL 2014 上,所以我没有可用的 string_Split,但我确实有一个用户定义的拆分函数,这就是诀窍。感谢您朝正确的方向轻推!【参考方案5】:DECLARE @x varchar(100)
SET @x = 'abcd-efgh-XXXX'
SELECT RIGHT(@x, CHARINDEX('-', REVERSE(@x)) - 1)
【讨论】:
【参考方案6】:你可以使用:
select right(col, charindex('-', reverse(col)) - 1)
【讨论】:
感谢您只是回答问题,而不是质疑或询问提问者的意图。以上是关于SQL 选择字符后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章