【问题标题】:How to use decode with a part of number in sql如何在sql中使用解码部分数字
【发布时间】:2020-04-13 09:42:08
【问题描述】:

我正在做一项家庭作业,我需要使用他们电话号码上的解码功能来确定一个国家/地区的员工人数和他们的平均工资。 电话号码的格式为 123.465.7890,我应该根据电话号码的前缀(011.* = 美国等)来确定国家/地区

SELECT DECODE (PHONE_NUMBER, 011. , 'USA', 515. , 'Germany', 590. , 'Canada', 603.,'France'),avg(salary), count(*)
FROM zamestnanci
group by phone_number;

我应该如何在解码函数中输入前缀以便能够将电话号码与国家/地区匹配?

【问题讨论】:

    标签: sql string oracle group-by count


    【解决方案1】:

    你可以在这里使用REGEXP_SUBSTR

    SELECT
        DECODE(REGEXP_SUBSTR(PHONE_NUMBER, '^[^.]+'),
            '011', 'USA',
            '515', 'Germany',
            '590', 'Canada',
            '603', 'France'),
        AVG(salary),
        COUNT(*)
    FROM zamestnanci
    GROUP BY
        REGEXP_SUBSTR(PHONE_NUMBER, '^[^.]+');
    

    【讨论】:

      【解决方案2】:

      您可以使用 substr 提取电话号码的相关部分:

      SELECT
          DECODE (
              SUBSTR(PHONE_NUMBER, 1, 3),
              '011', 'USA', 
              '515', 'Germany', 
              '590', 'Canada', 
              '603', 'France'
          ),
          AVG(salary), 
          COUNT(*)
      FROM zamestnanci
      GROUP BY DECODE (
              SUBSTR(PHONE_NUMBER, 1, 3),
              '011', 'USA', 
              '515', 'Germany', 
              '590', 'Canada', 
              '603', 'France'
          )
      

      【讨论】:

      • 请注意:这仅在所有国家/地区代码始终为三个字符的情况下才有效。
      • @TimBiegeleisen:是的。这遵循提供的规范 OP。
      • 是的,这个解决方案有效,因为所有国家/地区代码都是 3 个字符
      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 2012-05-13
      • 2014-02-23
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多