如果我在列WorkoutID中有一個看起來像的值100,10,7
我想從中洗掉值10,我可以使用以下 SQL 腳本:
UPDATE
UserDB.Programs
SET
WorkoutID = REPLACE(WorkoutID, ',10','')
WHERE
ProgramID = '7172';
這將正確輸出100,7.
預期的結果總是需要是
number, number,或者number
非number,,number,number,或,number
這使它變得棘手,因為在replace宣告中,我需要查找值,但是我如何假設逗號位置?即replace(WorkoutID, ',10', ''),或replace(WorkoutID, '10,', '')
uj5u.com熱心網友回復:
正如其他人在評論中指出的那樣,您不應將逗號分隔的值存盤在單個列中。
但是,如果您無法控制資料,這里有一個解決方案。
您的解決方案的問題是您可能會無意中洗掉其他值的一部分,即如果您有類似100,10,7,1000and remove,10的內容,您將得到100,700...
一種解決方案是在原始字串中添加前導和尾隨逗號,然后替換用逗號(即,10,)括起來的值,然后洗掉添加的前導和尾隨逗號。
例子 :
CREATE TABLE program (ProgramID INT, WorkoutID TEXT);
INSERT INTO program VALUES (1, '100,12,4,55,120,212,45');
SELECT TRIM(BOTH ',' FROM REPLACE(CONCAT(',', WorkoutID, ','),',12,',','))
FROM program;
結果 :
100,4,55,120,212,45
小提琴
可能還有其他使用 JSON 路徑等的解決方案,但我認為這個解決方案非常快速且易于理解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504980.html
