我的表包含有檔案名稱的[檔案]列
我有如下檔案:
我有如下檔案:
我有這樣的檔案:
U_1456789_23456789_File1_automaticrepair
U_3456789_3456789_File2_jumpjump
B_1134_445673_File3_plane
I_111345_333345_File4_chupapimonienio
P_1156_3556_File5 idk what
等等...
我想創建一列,在那里我將只看到加粗的值,我怎樣才能做到這一點?
uj5u.com熱心網友回復:
如果你的RDBMS支持它,正則運算式是一個更簡潔的解決方案。如果它不支持,(并且SQL Server 默認不支持),您可以使用SUBSTRING的組合。 com/en-us/sql/t-sql/functions/charindex-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15" rel="nofollow noreferrer">CHARINDEX來獲取第二和第三個下劃線之間的列中的文本如本題所解釋。
假設創建的表如下:
CREATE TABLE [Files] ([File] NVARCHAR(200) 。)
INSERT INTO [Files] VALUES
('U_1456789_23456789_File1_automaticrepair'),
('U_3456789_3456789_File2_jumpjump'),
('B_1134_445673_File3_plane'),
('I_111345_333345_File4_chupapimonienio') 。
('P_1156_3556_File5 idk what')。
你可以使用該查詢:
SELECT【檔案】。
SUBSTRING([File],
--在第二個下劃線之后開始取值。
--在原始欄位值中。
CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) 1,
--繼續獲取之間的長度。
--第二和第三下劃線的索引。
CHARINDEX('_', [File], CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) 1) - (CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) 1) AS 部分
FROM [Files];
要獲得結果:
編輯:對只有兩個下劃線的輸入進行蠻力支持:
CREATE TABLE [Files] ([File] NVARCHAR(200) 。)
INSERT INTO [Files] VALUES
('U_1456789_23456789_File1_automaticrepair'),
('U_3456789_3456789_File2_jumpjump'),
('B_1134_445673_File3_plane'),
('I_111345_333345_File4_chupapimonienio') 。
('P_1156_3556_File5 idk what')。
('K_25444_filenamecar')。
增加一個無法找到第三個下劃線的情況,調整傳遞給SUBSTRING的起始位置/長度。
SELECT [File],
CASE WHEN CHARINDEX('_'/span>, [File], CHARINDEX('_'/span>, [File], CHARINDEX('_', [File]) 1) 1) = 0)
THEN
SUBSTRING([File],
CHARINDEX('_', [File]) 1,
CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) - (CHARINDEX('_', [File]) 1)
ELSE[/span])
SUBSTRING([File],
CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) 1,
CHARINDEX('_'/span>, [File], CHARINDEX('_'/span>, [File], CHARINDEX('_', [File]) 1) 1) - (CHARINDEX('_', [File], CHARINDEX('_', [File]) 1) 1)
END AS 部分
FROM [Files];
| 檔案 | 部分 | ||||||
|---|---|---|---|---|---|---|---|
| U_1456789_23456789_File1_automaticrepair | 23456789 | ||||||
| U_3456789_3456789_File2_jumpjump | 3456789 | B_1134_445673_File3_plane | 445673 | I_111345_333345_File4_chupapimonienio | 333345 | P_1156_3556_File5 idk what? | 3556 |
| P_1156_3556_File5 idk what?
| K_25444_filenamecar |
請注意,這種方法更加脆弱,而且你肯定是在應用程式代碼中而不是由 SQL 引擎來處理問題的領域。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306850.html
標籤:
