【问题标题】:How to set column blank if column contains alphanumeric characters in sql如果列在sql中包含字母数字字符,如何将列设置为空白
【发布时间】:2017-03-20 09:54:07
【问题描述】:

我必须从表中获取 MSISDN 的 1 列。

结果如图所示,

enter image description here

在某些行中,每次不相同时它都会返回类似 nt&'gt;1 的字符串。

如果发生这种情况,我想将列设置为空白而不删除行。

【问题讨论】:

    标签: sql oracle oracle11g oracle10g


    【解决方案1】:

    您可以使用 SQL 中的 CASE 语句解决此问题

    SELECT CASE WHEN MSISDN = 'nt>1' THEN '' ELSE MSISDN END AS MSISDN
    

    【讨论】:

      【解决方案2】:

      您可以比较字符串,也可以使用LIKE 运算符。一些选项是:

      SELECT CASE
               WHEN MSISDN = 'nt>1'            THEN NULL -- match nt&gt1;
               WHEN MSISDN LIKE '%>%'          THEN NULL -- match > anywhere in the string
               WHEN LOWER( MSISDN ) LIKE '%<%' THEN NULL -- match < ignoring case
               WHEN MSISDN LIKE '%&%;%'           THEN NULL -- match & followed later by ;
               ELSE MSISDN
             END AS parsed_msisdn
      FROM   your_table
      

      【讨论】:

        【解决方案3】:
        select case
                 when REGEXP_LIKE(MSISDN, '[A-Za-z]') then null
                 else MSISDN
               end as MSISDN
        from MyTable
        

        【讨论】:

        • @AnujBedge 正则表达式对此太过分了,这将替换至少有一个非字母值的任何行。 OP的数据显示该列中的其他值是数字;所以它们都将被替换。
        • @MT0 我错误地将^ 留在了测试中......我的错
        • NP Jhon 我已根据我的查询进行了调整谢谢:)
        【解决方案4】:

        使用 REPLACE String 函数替换您的特定字符串:

          SELECT REPLACE(Your_columnName,'nt&''gt;1','')
          FROM Your_table 
        

        【讨论】:

        • 如果您在那里描述您的代码,这将是一个更好的答案!
        猜你喜欢
        • 2013-02-19
        • 1970-01-01
        • 2017-07-29
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多