给定一个由字母和数字组合而成的字段,有没有办法在SQL中获得最后一对(最右边的)字母(2个字母)?
SAMPLE DATA RT34-92837DF82982 DRE3-9292928373DO
对于这些,我希望DF和DO为清楚起见,这些字母后面只有数字。编辑这适用于SQL Server。
lvmkulzt1#
我会使用REGEXP_REPLACE或基于您的DBMS的类似函数删除任何非字母字符。
REGEXP_REPLACE
regexp_replace(col1, '[^a-zA-Z]+', '')
然后使用RIGHT或SUBSTRING函数选择“最右侧”。
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]+', ''))
如果您可以使用单个字母('DF 1234 A124'),则可以更改regex模式以删除这些字母-([^a-zA-Z][a-zA-Z][^a-zA-Z])|[^a-zA-Z]
([^a-zA-Z][a-zA-Z][^a-zA-Z])|[^a-zA-Z]
zdwk9cvp2#
正如您所说,* 这些字母后面将只有数字 *,您可以按如下方式使用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
See demo
2条答案
按热度按时间lvmkulzt1#
我会使用
REGEXP_REPLACE
或基于您的DBMS的类似函数删除任何非字母字符。然后使用
RIGHT
或SUBSTRING
函数选择“最右侧”。如果您可以使用单个字母('DF 1234 A124'),则可以更改regex模式以删除这些字母-
([^a-zA-Z][a-zA-Z][^a-zA-Z])|[^a-zA-Z]
zdwk9cvp2#
正如您所说,* 这些字母后面将只有数字 *,您可以按如下方式使用Trim和Right函数:
注意:这在SQL Server 2017中有效。
对于旧版本,请尝试以下操作:
See demo