给定一个字段与字母和数字的组合,是否有办法得到最后(最右)对字母(2个字母)在SQL?
SAMPLE DATA
RT34-92837DF82982
DRE3-9292928373DO
对于那些,我想DF和
为清楚起见,这些字母后面只会有数字。
编辑
我会删除任何不是字母的字符,使用REGEXP_REPLACE
或基于您的DBMS的类似函数。
regexp_replace(col1, '[^a-zA-Z]+', '')
然后使用RIGHT
或SUBSTRING
函数选择"最右"。
right(regexp_replace(col1, '[^a-zA-Z]+', ''), 2)
substring(regexp_replace(col1, '[^a-zA-Z]+', ''),len(regexp_replace(col1, '[^a-zA-Z]+', ''))-2,len(regexp_replace(col1, '[^a-zA-Z]+', ''))
如果你可以有字母('DF1234A124')的单次出现,那么可以改变正则表达式模式来删除这些也-([^a-zA-Z][a-zA-Z][^a-zA-Z])|[^a-zA-Z]
如您所说,在这些字母之后只会有数字,您可以像下面这样使用Trim和Right函数:
select
Right(Trim('0123456789' from val), 2) as res
from t
注意:这在SQL Server 2017中有效。
对于旧版本,请尝试以下操作:
select
Left
(
Right(val, PATINDEX('%[A-Z]%', Reverse(val))+1),
2
) as res
from t
看到演示