我有一个存储过程,它向我的一个参数发送一个字符串。
@deliveryName [nvarchar](255)
有时交付名称可以是“传递示例1",有时也可以是”传递方法-交付示例1“,也可以是”其他东西-交付示例1“。
这不能在它到达存储过程之前进行编辑,是否有一种安全的方法可以在第一个“--”纯粹在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
对于每一种可能的情况,但是每天都有新的方法,所以这很难跟上。
发布于 2022-03-11 19:41:33
对于没有“-”的名称,可以在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
https://stackoverflow.com/questions/71443211
复制相似问题