如何使用MySQL将整数和字符串从一列分成两列?

时间:2019-10-21 08:03:32

标签: mysql regex

我有一张这样的大桌子

id  |  machine
1   |  1 tractor
2   |  1 platform
3   |  2 cylinder
4   |  6 bob cat
5   |  2 excavator
6   |  3 tractor
...
...

我想首先从“机器”列中仅选择整数,然后从“机器”列中仅选择varchar

看起来应该像这样

id  |  number          id  |  varchar 
1   |  1               1   |  tractor
2   |  1               2   |  platform
3   |  2               3   |  cylinder
4   |  6               4   |  bob cat
5   |  2               5   |  excavator
6   |  3               6   |  tractor

对此我需要两个查询,因为我以后需要对所有整数求和并获得与varchar不同的值。

我已经尝试过这两个命令,但是不能解决我的问题

SELECT machine  FROM machines WHERE machine REGEXP '^[0-9]+$';


SELECT machine FROM machines WHERE machine REGEXP '[a-zA-Z]'; 

2 个答案:

答案 0 :(得分:2)

<label> <input class="custom" name="pay-type" value="mc" type="radio" checked /> <span>Emoney</span> </label> .custom { background-color: initial; cursor: default; -webkit-appearance: radio; box-sizing: border-box; margin: 3px 3px 0px 5px; padding: initial; border: initial; } INSTR一起使用:

SUBSTRING

screen capture from demo link

Demo

上面的代码在这里工作得很好,因为SELECT id, machine, CAST(SUBSTRING(machine, 1, INSTR(machine, ' ') - 1) AS UNSIGNED) AS machine_id, SUBSTRING(machine, INSTR(machine, ' ') + 1) AS machine_name FROM machines ORDER BY id; (不是一个特别强大的字符串函数)返回 first 出现的空间的从1开始的索引,它是定界符我们想在这里使用。然后,我们只需要获取两个子字符串即可找到机器ID和描述。

答案 1 :(得分:1)

无论您的号码有多少位数,此解决方案都将帮助您使用+0检索列的整数值。然后使用字符串函数获取机器namenumber

select trim(replace(machine  , machine +0, '')) as machine
  ,  machine  +0 as number 
from machines;

请参阅dbfiddle