我有一個表Product,我正在嘗試替換下Product ID圖中列中的一些值:
| 產品編號 |
|---|
| PIDLL0000074853 |
| PIDLL000086752 |
| PIDLL00000084276 |
我熟悉 REPLACE 函式,并像這樣使用它:
SELECT REPLACE(ProductID, 'LL00000', '/') AS 'Product Code'
FROM Product
回傳:
| 產品代碼 |
|---|
| PID/74853 |
| PIDLL000086752 |
| PID/084276 |
ProductID 中總會有字母 L 兩次LL。但是,零的范圍在 4-6 之間。該L和0應以更換/。
如果有人可以建議實作這一目標的最佳方法,將不勝感激。我使用的是 Microsoft SQL Server,因此標準 SQL 語法將是理想的。
uj5u.com熱心網友回復:
請嘗試以下解決方案。
所有功勞歸于@JeroenMostert
查詢陳述句
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, ProductID VARCHAR(50));
INSERT INTO @tbl (ProductID) VALUES
('PIDLL0000074853'),
('PIDLL000086752'),
('PIDLL00000084276'),
('PITLL0000084770');
-- DDL and sample data population, end
SELECT *
, CONCAT(LEFT(ProductID,3),'/', CONVERT(DECIMAL(38, 0), STUFF(ProductID, 1, 5, ''))) AS [After]
FROM @tbl;
輸出
---- ------------------ -----------
| ID | ProductID | After |
---- ------------------ -----------
| 1 | PIDLL0000074853 | PID/74853 |
| 2 | PIDLL000086752 | PID/86752 |
| 3 | PIDLL00000084276 | PID/84276 |
| 4 | PITLL0000084770 | PIT/84770 |
---- ------------------ -----------
uj5u.com熱心網友回復:
這在 T-SQL 中并不是特別漂亮,因為它不支持正則運算式甚至模式替換。因此,您的方法是使用類似的方法CHARINDEX并PATINDEX找到開始和結束位置,然后替換(不要閱讀REPLACE)該部分文本。
這用于CHARINDEX查找'LL', 然后PATINDEX查找該'0'位置之后的第一個非字符。由于PATINDEX不支持開始位置,我必須使用它STUFF來洗掉第一個字符。
然后,最后,我們可以STUFF(再次)使用單個 替換字符的長度'/':
SELECT STUFF(V.ProductID,CI.I 2,ISNULL(PI.I,0),'/')
FROM (VALUES('PIDLL0000074853'),
('PIDLL000086752'),
('PIDLL00000084276'),
('PIDLL3246954384276'))V(ProductID)
CROSS APPLY(VALUES(NULLIF(CHARINDEX('LL',V.ProductID),0)))CI(I)
CROSS APPLY(VALUES(NULLIF(PATINDEX('%[^0]%',STUFF(V.ProductID,1,CI.I 2,'')),1)))PI(I);
uj5u.com熱心網友回復:
如果您總是以“PIDLL”開頭,則可以洗掉“PIDLL”,將其余部分轉換為 INT 以丟失前導 0,然后在字串的前面附加“PID/”。一行代碼。
-- Sample Data
DECLARE @t TABLE (ProductID VARCHAR(40));
INSERT @t VALUES('PIDLL0000074853'),('PIDLL000086752'),('PIDLL00000084276');
-- Solution
SELECT t.ProductID, NewProdID = 'PID/' LEFT(CAST(REPLACE(t.ProductID,'PIDLL','') AS INT),20)
FROM @t AS t;
回傳:
ProductID NewProdID
------------------ ----------------
PIDLL0000074853 PID/74853
PIDLL000086752 PID/86752
PIDLL00000084276 PID/84276
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358085.html
標籤:sql sql-server 查询语句
上一篇:SQL:左連接與分組連接的行
