我目前正在验证包含每个客户的参考号的列的过程,但是它们必须是一种特定格式才能算作真正的数字。
[最初我收到了大约80个csv文件,并经过确定所有表具有相同列数等的过程后将其上传到单个主表中(下面是一个示例,因为我有90多个列)。
以下是我的创建表查询,我决定将所有内容都保留为第一个ID列的varchar列,以确保不会遗漏任何数据。
CREATE TABLE IF NOT EXISTS `master_table` (
`id` int(11) NOT NULL,
`Name` varchar(255) ,
`Business_Name` varchar(255) ,
`Contact_Person` varchar(255) ,
`Tel_Number` varchar(255) ,
`Tel_Number_2` varchar(255) ,
`Email` varchar(255) ,
`House_Name` varchar(255) ,
`Door_Number` varchar(255) ,
`Street` varchar(255) ,
`Town` varchar(255) ,
`Locality` varchar(255) ,
`County` varchar(255) ,
`Post_Code` varchar(255) ,
`Supplier` varchar(255) ,
`Annual_Usage` varchar(255) ,
`Start_Date` varchar(255) ,
`End_Date` varchar(255) ,
`PA_Nmbr` varchar(255)
;
然后我上传了所有数据,这给了我大约90万行数据。
我感兴趣的特定列是PA_Nmbr列。要将其用作真正的参考号,它必须为13位长,因此我写了以下查询以查看记录数:
SELECT
SUM(CASE WHEN LEN <13 THEN CNT ELSE 0 END) AS UNDER_13, -- 201,112
SUM(CASE WHEN LEN =13 THEN CNT ELSE 0 END) AS PA_13, -- 701,019
SUM(CASE WHEN LEN >13 THEN CNT ELSE 0 END) AS OVER_13 -- 942
FROM
(
SELECT
LENGTH(PA_NMBR) AS LEN,
COUNT(*) AS CNT
FROM
master_table
GROUP BY
LENGTH(PA_NMBR)
) A
;
所以这告诉我,大约70%的数据具有正确的长度,但是下一步是要确保将数据添加到数据库后,数字没有被四舍五入。因此,例如,如果真实号码为1234567899999,并且已四舍五入为1234567890000。
所以,我很想写一个查询,在其中我可以对从右侧开始的列中的0进行计数。
因此,如果我想快速检查并计算我拥有多少记录,这些记录以数字开头,即1234,然后全为0,那么我可以快速做到这一点。这将告诉我数据本身存在问题。
如果有人可以就如何编写此查询提出建议,我将不胜感激。
谢谢。
看一下SELECT LEN(REPLACE('YYNYNYYNNNYYNY','N',''))方法。有人问过类似的问题,并在这里回答:How to count instances of character in SQL Column