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 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);