如何从字符串中剪切特定数字并在 select mysql 中对其进行操作
How cut specifics number from string and operate on them in select mysql
我的字段中有如下所示的数据:
SR01-20, MA-5
我想把一直在“-”号后面的数字分开,然后求和。不知何故 select 它们,转换为数字并相加。
这个例子的结果应该是:
25
您可以使用 substring_index()
和转换:
select sum(substring_index(col, '-', -1) + 0)
+ 0
进行静默转换。所以如果连字符后面的部分不是数字,那么它将被转换为零并且不会发出错误。
Here 是 SQL Fiddle 显示结果。
你可以试试这个:
select substring_index(substring_index(col,',',1),'-',-1) +
substring_index(substring_index(col,',',2),'-',-1) as result
from table_name;
并且,您可以添加 +0
将 substring_index
的结果转换为数字。
更新:
首先,您必须将 col
拆分为 ","
作为分隔符。然后 SUM()
与 GROUP BY
的值。
您可以试试这个 sql 查询:
SELECT id,sum(substring_index(spl,'-',-1)) sa from
(
SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(e.col, ',', n.n), ',', -1) spl
FROM table_name e CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(e.col) - LENGTH(REPLACE(e.col, ',', '')))
ORDER BY id, col
) t
group by id
我不知道你的 table 结构,但我希望你明白我在那个查询中的意思。
我的字段中有如下所示的数据:
SR01-20, MA-5
我想把一直在“-”号后面的数字分开,然后求和。不知何故 select 它们,转换为数字并相加。
这个例子的结果应该是:
25
您可以使用 substring_index()
和转换:
select sum(substring_index(col, '-', -1) + 0)
+ 0
进行静默转换。所以如果连字符后面的部分不是数字,那么它将被转换为零并且不会发出错误。
Here 是 SQL Fiddle 显示结果。
你可以试试这个:
select substring_index(substring_index(col,',',1),'-',-1) +
substring_index(substring_index(col,',',2),'-',-1) as result
from table_name;
并且,您可以添加 +0
将 substring_index
的结果转换为数字。
更新:
首先,您必须将 col
拆分为 ","
作为分隔符。然后 SUM()
与 GROUP BY
的值。
您可以试试这个 sql 查询:
SELECT id,sum(substring_index(spl,'-',-1)) sa from
(
SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(e.col, ',', n.n), ',', -1) spl
FROM table_name e CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(e.col) - LENGTH(REPLACE(e.col, ',', '')))
ORDER BY id, col
) t
group by id
我不知道你的 table 结构,但我希望你明白我在那个查询中的意思。