仅从具有混合字母数值的字符串值中删除最后一个数字

问题描述 投票:0回答:1

我正在寻求帮助,以便仅从 SQL Server 中的字符串值中删除最后一个数字。

最后一个字母字符之前的任何数字都可以保留。

示例:- abcd-1-efgh12

sql sql-server
1个回答
2
投票

一种方法是结合 patindex、reverse、len 和 left。

首先,创建并填充示例表(在您以后的问题中保存此步骤):

CREATE TABLE MyTable
(
Col nvarchar(20)
);

INSERT INTO MyTable(Col) VALUES
('abcd-1-efgh12'),
('adc-1-def1'),
('a1-1-a1'),
-- Added some edge cases: 
('123-fa'), -- last chars are not digits
('asdf'), -- no digits at all
('123'); -- no non-digit chars at all

查询:

SELECT Col, LEFT(Col, LEN(Col)+1-PATINDEX('%[^0-9]%', REVERSE(Col)))
FROM MyTable

结果:

科尔 (无栏名)
abcd-1-efgh12 abcd-1-efgh
adc-1-def1 adc-1-def
a1-1-a1 a1-1-a
123-fa 123-fa
asdf asdf
123 123

注意:如果字符串仅包含数字,则不会更改。

您可以在 db<>fiddle

上观看现场演示
© www.soinside.com 2019 - 2024. All rights reserved.