如何计算Oracle SQL中右边一列中有多少个零

问题描述 投票:0回答:1

我目前正在验证包含每个客户的参考号的列的过程,但是它们必须是一种特定格式才能算作真正的数字。

[最初我收到了大约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,那么我可以快速做到这一点。这将告诉我数据本身存在问题。

如果有人可以就如何编写此查询提出建议,我将不胜感激。

谢谢。

mysql sql count case
1个回答
0
投票

看一下SELECT LEN(REPLACE('YYNYNYYNNNYYNY','N',''))方法。有人问过类似的问题,并在这里回答:How to count instances of character in SQL Column

© www.soinside.com 2019 - 2024. All rights reserved.