我需要在SQL中從文本檔案中提取部分名稱。 檔案名總是這樣的:
我需要在SQL中提取文本檔案的部分名稱。
AA_123456789_MoreText_MMDDYYYYHMM.txt
我需要得到的是第一個和第二個下劃線之間。 這一部分的字符長度是不同的。 通常它們都是數字,但有時也包括一個字母在里面。
對于在SQL中處理這個問題的最佳方法有什么想法嗎?
uj5u.com熱心網友回復:
下面是使用SUBSTRING和CHARINDEX的一種方法:
SELECT SUBSTRING(filename,
CHARINDEX('_', filename) 1,
CHARINDEX('_'/span>, filename, CHARINDEX('_'/span>, filename, 1) - 2)
FROM yourTable;
Demo
用簡單的英語來說,上面的子串操作說的是截取第一個下劃線之后、第二個下劃線之前的所有內容。
uj5u.com熱心網友回復:
請嘗試以下基于標記化的解決方案。
這樣你就可以在一個字串的任何位置選擇任何標記。
SQL
--DDL和樣本資料群,開始。
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(8000))。)
INSERT INTO @tbl (tokens) VALUES
('AA_123456789_MoreText_MMDDYYYYHMM.txt') 。
('BB_770_MoreText_MMDDYYYYHMM.xml') 。
-- DDL和樣本資料人口,結束。
DECLARE @separator CHAR(1) = '_'/span>
, @position INT = 2;
SELECT ID, tokens
, c.value('(/root/r[sql:variable("@position")]/text())[1]', 'VARCHAR(MAX)') AS Token
FROM @tbl
CROSS APPLY (SELECT TRY_CAST('<root><r><[CDATA[' )
REPLACE(tokens, @separator, ']></r><r>< [CDATA[')
']]></r></root>' AS XML) AS t(c)。
輸出
---- ---------------------------------------- -----------
| ID | tokens | Token |
---- ---------------------------------------- -----------
| 1 | AA_123456789_MoreText_MMDDYYYYHHMM. txt | 123456789 |
| 2 | BB_770_MoreText_MMDDYYYYHMM. xml | 770 |
---- ---------------------------------------- -----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328425.html
標籤:
