SQL查询/函数仅从末尾删除字母

Posted

技术标签:

【中文标题】SQL查询/函数仅从末尾删除字母【英文标题】:SQL Query/function to remove alphabets only from end 【发布时间】:2015-08-06 12:26:20 【问题描述】:

在创建一个仅从末尾删除字符(字母)或直到数字出现在右侧的函数时需要帮助。

例如:

select fnStripRightAlpha('ABCD123F') --Should Return 'ABCD123'

select fnStripRightAlpha('PORT123G67KK') --Should Return 'PORT123G67'

select fnStripRightAlpha('123465') --Should Return '123465'

select fnStripRightAlpha('ABCDG') --Should Return ''

我 saw functions 删除了所有字母,但它们并没有解决我的目的,因为只删除最右边的字符。

有什么想法吗?

【问题讨论】:

【参考方案1】:

假设您只有字母数字字符,您可以像这样使用PATINDEXSTUFFREVERSE

查询

SELECT
ISNULL(REVERSE(STUFF(REVERSE(col),1,PATINDEX('%[0-9]%',REVERSE(col)) -1,'')),'') as col
FROM
(
    VALUES('ABCD123F'),('PORT123G67KK'),('123465'),('ABCDG')
) as tab(col)

输出

col
ABCD123
PORT123G67
123465
''

【讨论】:

【参考方案2】:

最简单的方法是

    declare @str varchar(100)
set @str='ABCD123F'
select substring(@str,1,len(@str)-patindex('%[0-9]%',reverse(@str))+1)

【讨论】:

简单但不适用于案例 2 和 4。返回 PORT123G67KABCD

以上是关于SQL查询/函数仅从末尾删除字母的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询以查找由字母分隔的重复项

如何仅从 SQL 查询输出中获取不带括号的值

聚合 SQL 函数以仅从每个组中获取第一个

Java JDBC 对要求仅从特定行返回详细信息的 SQL 查询抛出错误

用一条sql语句查询表中字段的所有首字母大写

SQL 仅从当月选择记录