如何我可以選擇SQL服務器:選擇後的特定字符的所有
- 「ALT1」 如果值是 「W61N03D20V0-WHIH-ALT1」
- 「ALT2」 如果 「W61N03D20V0-WHIH-ALT2」
- 「SW」 爲 「W61N03D20V0-WHIH-SW」
- 「默認」 爲 「W61N26D1YA1-VICU」(不前綴)
- 「Defailt」 爲 「W61N27D21V2-AZTD」
換句話說,我正在尋找第二個後綴後一種方式提取物最後一部分,但如果我have't第二後綴 - 再違約
感謝意見
如何我可以選擇SQL服務器:選擇後的特定字符的所有
換句話說,我正在尋找第二個後綴後一種方式提取物最後一部分,但如果我have't第二後綴 - 再違約
感謝意見
試試這樣說:
首先,用XML技巧「分割」減號的字符串。然後你讀了你的第三個節點XML - 瞧!
CREATE TABLE #tbl(content VARCHAR(100));
INSERT INTO #tbl VALUES('W61N03D20V0-WHIH-ALT1')
,('W61N03D20V0-WHIH-SW')
,('W61N26D1YA1-VICU');
WITH SplittedAsXml AS
(
SELECT CAST('<x>' + REPLACE(content,'-','</x><x>') + '</x>' AS XML) AS Content
FROM #tbl
)
SELECT ISNULL(Content.value('/x[3]','varchar(max)'),'default') AS TheThirdPart
FROM SplittedAsXml;
DROP TABLE #tbl;
結果
ALT1
SW
default
走這方面也將給予您獲得一個其他部分的機會去只是查詢/x[1]
和/x[2]
太
奇妙的是它真的有用! –
如果我明白你問什麼因爲,以下是你需要的:
-- fake table
WITH SomeTable AS (
SELECT 'W61N03D20V0-WHIH-ALT1' AS Field1
UNION ALL
SELECT 'W61N03D20V0-WHIH-SW'
UNION ALL
SELECT 'W61N26D1YA1-VICU'
)
-- select
SELECT
CASE CHARINDEX('-WHIH-', Field1)
WHEN 0 THEN 'Default'
ELSE SUBSTRING(Field1, CHARINDEX('-WHIH-', Field1) + 6, LEN(Field1) - (CHARINDEX('-WHIH-', Field1) + 5))
END
FROM SomeTable
我不認爲,有趣數據之前的部分總是「-WHIH-」......但這是OP應該清除的東西。 – Shnugo
我做到了使用內置substring()
功能:
declare @str VARCHAR(40) = 'W61N03D20V0-WHIH-ALT1' -- also works for the other examples
declare @sep VARCHAR(1) = '-'
declare @middleToEnd VARCHAR(40) = substring(@str, charindex(@sep, @str) + 1, len(@str))
declare @pos INT = charindex(@sep, @middleToEnd)
declare @lastPart VARCHAR(40) =
CASE WHEN @pos = 0
THEN 'Default'
ELSE substring(@middleToEnd, @pos + 1, len(@middleToEnd))
END
select @lastPart
使用可以使用CASE
表達式來檢查字符串是否與W61N03D20V0-WHIH
開始。
如果它以RIGHT
,REVERSE
和CHARINDEX
的組合作爲起始字符串,則返回Default
。
查詢
select case when [your_column_name] like 'W61N03D20V0-WHIH%'
then right([your_column_name], charindex('-', reverse([your_column_name]), 1) - 1)
else 'Default' end as new_column_name
from your_table_name;
爲了獲得最佳性能,你可以用這一個班輪解決這個問題(計算一行)
SELECT
COALESCE(STUFF(col,1,NULLIF(CHARINDEX('-',col, CHARINDEX('-',col)+1), 0),''),'Default')
FROM (values
('W61N03D20V0-WHIH-ALT1'),('W61N03D20V0-WHIH-ALT2'),
('W61N03D20V0-WHIH-SW'),('W61N26D1YA1-VICU'),
('W61N27D21V2-AZTD')) x(col)
結果:
ALT1
ALT2
SW
Default
Default
邏輯不太清楚。你能詳細說明嗎? –
@ZoharPeled,我認爲它應該總是帶有負連接字符串的第三部分。 – Shnugo
我已添加更多示例 –