mysql同时使用varchar和int计数

时间:2018-08-30 14:30:29

标签: mysql

一种对可能具有INT或varchar的列进行计数和分组的好方法是什么?

我正在尝试在一个表(不是我的表)中查找重复项,在该表中有人“明智地”添加了带或不带前导零的部门编号。

bank_cnt_fk字段中的示例数据可能包含:

   bank_cnt_fk
   03000001080
   3000001080

这些基本上都相同,但是有不同的系统将两种不同类型的数据馈入该数据库。我需要找到重复项,以便清理这些混乱。

以下查询似乎不起作用,因为没有结果大于1。

SELECT id, bank_cnt_fk, count(cast(bank_cnt_fk as unsigned))
FROM org_desc_data group by bank_cnt_fk

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用以下内容:

SELECT id,
      CAST(bank_cnt_fk AS UNSIGNED), 
      COUNT(*) 
FROM org_desc_data 
GROUP BY CAST(bank_cnt_fk AS UNSIGNED)

答案 1 :(得分:1)

@Madhur的评论可能是对您问题的最佳答案。还有另一种选择,即剥离所有前导零:

SELECT
    TRIM(LEADING '0' FROM bank_cnt_fk) bank_cnt_fk,
    COUNT(*) AS cnt
FROM org_desc_data
GROUP BY
    TRIM(LEADING '0' FROM bank_cnt_fk);