我有一個將字串發送到我的引數之一的存盤程序
@deliveryName [nvarchar](255)
有時交貨名稱可以是“交貨示例 1”,有時可以是“交貨方式 - 交貨示例 1”,也可能是“其他 - 交貨示例 1”
這在它命中存盤程序之前不能被編輯,有沒有一種安全的方法來修剪第一個“-”之前的所有內容,純粹是在 sql server 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
對于每一種可能性,但每天總會有新的方法,所以這很難跟上。
uj5u.com熱心網友回復:
看起來它只需要一個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;
交貨名稱 交付示例 - 2
關于db<>fiddle的演示在這里
uj5u.com熱心網友回復:
對于沒有“-”的名稱,您可以將“-”附加到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://www.uj5u.com/qukuanlian/441785.html
