我一直在嘗試在表中編輯/添加值字符串列(進程)。字符串字段中的計算MySQL
字符串中的電流值是如下:
1:38,25:39,41:101
我想要做的就是加1000後的每一個值「X:」這樣的查詢後,值應爲:
1:1038,25:1039,41:1101
我曾看過CONCAT,但似乎只在特定參數內插入一個值到字符串中。有任何想法嗎?
我一直在嘗試在表中編輯/添加值字符串列(進程)。字符串字段中的計算MySQL
字符串中的電流值是如下:
1:38,25:39,41:101
我想要做的就是加1000後的每一個值「X:」這樣的查詢後,值應爲:
1:1038,25:1039,41:1101
我曾看過CONCAT,但似乎只在特定參數內插入一個值到字符串中。有任何想法嗎?
您可以使用CAST
CONCAT
和SUBSTRING_INDEX
函數來獲得所需要的輸出,例如:
SELECT
CONCAT(SUBSTRING_INDEX(value, ':', 1), ":", (CAST(SUBSTRING_INDEX(value, ':', -1) AS UNSIGNED) + 1000))
FROM test;
這裏的SQL Fiddle。
有問題的數據是**不是**在單獨的行中。因此,這不能回答給定的問題。 – GurV
使用變量可以幫助你實現你想要什麼:
select @pre := SUBSTRING_INDEX(SUBSTRING_INDEX(`column_name`, ':', 1), '0', -1),
@post := SUBSTRING_INDEX(SUBSTRING_INDEX(`column_name`, ':', 2), '0', -1),
concat(@pre,":",@post+1000) as required_value from table_name;
參考文獻:
不知道這是否回答這個問題,但**從不**在同一個語句中讀寫相同的用戶變量。處理的順序不能保證,因此,結果。 – GurV
呦你應該規範化數據並將其存儲在一個單獨的表中。這就是說,要回答你的問題,你可以使用這些查詢來實現你想要的:
CREATE TEMPORARY TABLE temp (val VARCHAR(50));
SET @str = CONCAT("INSERT INTO temp (val) VALUES ('",REPLACE((SELECT org FROM mytable LIMIT 1), ",", "'),('"),"');");
PREPARE st FROM @str;
EXECUTE st;
SELECT
GROUP_CONCAT(DISTINCT CONCAT(SUBSTRING_INDEX(val, ':', 1), ":", (CAST(SUBSTRING_INDEX(val, ':', -1) AS UNSIGNED) + 1000)))
FROM temp;
只需確保在您的查詢,返回1:38,25:39,41:101
你需要編輯字符串上面的查詢,以取代SELECT org FROM mytable LIMIT 1
。請注意,此示例僅顯示如何處理一個字符串中的值。如果你需要處理多行的值,你需要調整多一點...
檢查sqlfiddle:http://sqlfiddle.com/#!9/bf6da4/1/0
現在你知道爲什麼正常化幫助! – GurV
@Paul問題提供的示例顯示用逗號分隔的單行或多行? –