我想动态删除 SQL 中 varchar 末尾的数字

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

1                Tata-Motors\Harry9

2                Orian-Analytics\Kartik10

3                adventure-works\Rajashree3

我有为本实验创建的此类样本数据。 我想动态删除前面的公司名称和后面的数字。 我已经很容易地找到删除公司名称的方法,但我正在努力动态地从末尾删除数字,以便无论数字的长度如何,程序都可以正常工作。

我尝试了PatIndex,但我似乎无法找出解决这个问题的确切公式。

select LoginId,
       Substring(LoginId,
       charindex('\', LoginID)+1, LEN(LoginID)-charindex('\', LoginID)-patindex('%[0-9]%',LoginId)) Name
       from dbo.Tester

这是我到目前为止所想到的,但它给出了错误“传递给 LEFT 或 SUBSTRING 函数的长度参数无效。”由于某种原因。

预期输出:

LoginId                     Name

Tata-Motors\Harry9          Harry

Orian-Analytics\Kartik10    Kartik

adventure-works\Rajashree3  Rajashree
sql ssms
1个回答
0
投票

假设您使用的是 SQL Server 2022(或 Azure SQL 数据库),您可以使用

CHARINDEX
查找正斜杠 (
/
) 的位置,然后使用
STUFF
删除该位置之前的字符。然后您可以使用
RTRIM
删除右侧的数字,因为它现在接受要删除的字符作为第二个参数:

SELECT RTRIM(STUFF(V.LoginID,1,CHARINDEX('\',V.LoginID),N''),'0123456789')
FROM (VALUES(1,N'Tata-Motors\Harry9'),
            (2,N'Orian-Analytics\Kartik10'),
            (3,N'adventure-works\Rajashree3'))V(AccountID,LoginID);
© www.soinside.com 2019 - 2024. All rights reserved.