将mysql数据库中的一列拆分为两列

时间:2018-07-16 07:26:10

标签: mysql

我试图将一列分为两部分,然后进行比较以在我的列中查找重复的值。

以下是我的列中的数据示例

'ETORHHF000224000023305'
'ETORHHF000002000000623'
'ETORHHF000002000000624'
'ETORHHF000002000000625'
'ETORHHF000002000000626'
'ETORHHF000002000000627'
'ETH0001845254525 '
'ETH0001845264526 '
'ETH0001845274527 '
'ETH0001845284528 '
'ETH0001845304530 '

要在我的数据库中获取所有此ID的查询是

select * from animals

我在网上找到了以下解决方案,但它适用于 Microsoft SQL Server ,但我无法使其适用于 MySQL

SELECT m.name,
       LEFT(m.name, CHARINDEX("\", m.name) - 1) AS column1,
       RIGHT(m.name, LEN(m.name) - CHARINDEX("\", m.name)) AS column2
FROM MyTable m

2 个答案:

答案 0 :(得分:1)

如果您只想在重复输入每个数字时在其右边标记12个数字,则可以尝试以下查询:

SELECT
    RIGHT(entry, 12) AS entry,
    MIN(entry) AS first,
    MAX(entry) AS second
FROM animals
GROUP BY RIGHT(entry, 12)
HAVING COUNT(*) > 1;

如果您还想要完整的重复记录,则可以使用:

SELECT *
FROM animals
WHERE RIGHT(entry, 12) IN (
    SELECT RIGHT(entry, 12) AS entry
    FROM animals
    GROUP BY RIGHT(entry, 12)
    HAVING COUNT(*) > 1
);

答案 1 :(得分:1)

Mysql(> = 8)和MariaDB(> = 10)支持一些正则表达式函数。

如果至少使用这些版本,则可以执行以下操作:

select 
  name,
  REGEXP_REPLACE(name, '\\d+\\s*$', '') as letters,
  REGEXP_REPLACE(name, '^[a-zA-Z]+', '') as numbers
from animals;

一个example