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 选择字符后的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server替换,删除特定字符后的所有内容

SQL Regex - 选择“/”之后的所有内容并拆分为数组

excel中怎么提取指定字符后面所有的字符

SQL - 选择两个字符串行之间的所有行

删除mysql中字符串后的所有内容

SQL 选择除最近日期之外的所有内容