在 SQL Server 2019 中修剪 nvarchar 参数
Trimming a nvarchar param in SQL Server 2019
我有一个将字符串发送到我的参数之一的存储过程
@deliveryName [nvarchar](255)
发货名称有时可以是“发货示例1”,有时可以是“发货方式-发货示例1”,也可以是“其他-发货示例1”
这不能在它到达存储过程之前进行编辑,是否有一种安全的方法来 trim 纯粹在 sql 服务器 MSSQL 中的第一个“-”之前的所有内容?我说有没有安全的方法来处理快递名称中有多个“-”的情况。例如“交付方式 - 交付示例 - 2”我只想输出“交付示例 - 2”
到目前为止我看过的所有地方都在说要使用一个案例(类似这样)
CASE
WHEN str LIKE ',%,' THEN SUBSTRING(str, 2, LEN(str)-2)
WHEN str LIKE ',%' THEN RIGHT(str, LEN(str)-1)
WHEN str LIKE '%,' THEN LEFT(str, LEN(str)-1)
ELSE str
END
对于所有可能发生的情况,但每天总会有新方法,因此很难跟上。
对于没有“-”的名称,您可以将“-”附加到 DeliveryName
变量,获取“-”首次出现的索引并获取其右侧的字符串指数
SELECT RIGHT(DeliveryName, CHARINDEX('-', DeliveryName+'-')+2) FROM #Temp
CREATE TABLE #Temp ( DeliveryName NVARCHAR(255))
INSERT INTO #Temp VALUES ('Delivery example-1')
INSERT INTO #Temp VALUES ('Delivery method - Delivery example 1 ')
INSERT INTO #Temp VALUES (' something else - Delivery example 1')
INSERT INTO #Temp VALUES (' Delivery method - Delivery example - 2')
SELECT RIGHT(DeliveryName, CHARINDEX('-', DeliveryName+'-')+2) FROM #Temp
output
--------------------------------------------------------
(No column name)
Delivery example 1
Delivery example 1
Delivery example 1
Delivery example - 2
Delivery example-1
看起来它只需要 SUBSTRING
和 CHARINDEX
或 PATINDEX
来获取第一个破折号的位置。
测试片段
declare @deliveryName nvarchar(255);
set @deliveryName = 'Delivery method - Delivery example - 2';
set @deliveryName = ltrim(substring(@deliveryName, charindex('-', @deliveryName)+1, len(@deliveryName)));
select @deliveryName as deliveryName;
deliveryName
Delivery example - 2
演示 db<>fiddle here
我有一个将字符串发送到我的参数之一的存储过程
@deliveryName [nvarchar](255)
发货名称有时可以是“发货示例1”,有时可以是“发货方式-发货示例1”,也可以是“其他-发货示例1”
这不能在它到达存储过程之前进行编辑,是否有一种安全的方法来 trim 纯粹在 sql 服务器 MSSQL 中的第一个“-”之前的所有内容?我说有没有安全的方法来处理快递名称中有多个“-”的情况。例如“交付方式 - 交付示例 - 2”我只想输出“交付示例 - 2”
到目前为止我看过的所有地方都在说要使用一个案例(类似这样)
CASE
WHEN str LIKE ',%,' THEN SUBSTRING(str, 2, LEN(str)-2)
WHEN str LIKE ',%' THEN RIGHT(str, LEN(str)-1)
WHEN str LIKE '%,' THEN LEFT(str, LEN(str)-1)
ELSE str
END
对于所有可能发生的情况,但每天总会有新方法,因此很难跟上。
对于没有“-”的名称,您可以将“-”附加到 DeliveryName
变量,获取“-”首次出现的索引并获取其右侧的字符串指数
SELECT RIGHT(DeliveryName, CHARINDEX('-', DeliveryName+'-')+2) FROM #Temp
CREATE TABLE #Temp ( DeliveryName NVARCHAR(255))
INSERT INTO #Temp VALUES ('Delivery example-1')
INSERT INTO #Temp VALUES ('Delivery method - Delivery example 1 ')
INSERT INTO #Temp VALUES (' something else - Delivery example 1')
INSERT INTO #Temp VALUES (' Delivery method - Delivery example - 2')
SELECT RIGHT(DeliveryName, CHARINDEX('-', DeliveryName+'-')+2) FROM #Temp
output
--------------------------------------------------------
(No column name)
Delivery example 1
Delivery example 1
Delivery example 1
Delivery example - 2
Delivery example-1
看起来它只需要 SUBSTRING
和 CHARINDEX
或 PATINDEX
来获取第一个破折号的位置。
测试片段
declare @deliveryName nvarchar(255); set @deliveryName = 'Delivery method - Delivery example - 2'; set @deliveryName = ltrim(substring(@deliveryName, charindex('-', @deliveryName)+1, len(@deliveryName))); select @deliveryName as deliveryName;
deliveryName Delivery example - 2
演示 db<>fiddle here