正则表达式以查找列中的空值(&QOOT;NULL&QOOT;VALUE) [英] regex to find "null" values from a column

查看:22
本文介绍了正则表达式以查找列中的空值(&QOOT;NULL&QOOT;VALUE)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一列JSON_DATA。此列中的值具有对象类型。它包含一个json。此查询运行正常:

SELECT
    $1 AS "JSON_DATA"
 FROM TEST_TABLE 

数据可能如下所示:

{
  "Type": "xxi",
  "Quantity": "null",
  "ContactPerson": "null",
  "Email": null
}
此字段中的某些值为";null";。我要搜索带引号的&nulls";的所有匹配项,并将它们替换为正确的空值/regex_place。

期望的输出结果:

{
  "Type": "xxi",
  "Quantity": NULL,
  "ContactPerson": NULL,
  "Email": null
}

我尝试过:

SELECT
    REGEXP_REPLACE( $1 , "null",  NULL) AS "JSON_DATA"
 FROM TEST_TABLE 

但是我收到一个错误:

SQL Error [904] [42000]: SQL compilation error: error line 2 at position 22
invalid identifier '"null"'

我认为这是因为第二个参数中的&null";不是任务的正确正则表达式。我如何修复此问题?

编辑:

我还尝试了这个:

SELECT
    REGEXP_REPLACE( $1 , '"null"',  NULL) AS "JSON_DATA"
 FROM TEST_TABLE 

但是,对于所有行,最终结果只是NULL,而不是在每行的json对象中查找并替换所有&null";。

推荐答案

双引号需要为普通字符串

SELECT
    REGEXP_REPLACE( $1 , '"null"',  NULL) AS "JSON_DATA"
 FROM TEST_TABLE 

如您所知,DB正在查找名为null的列,即Snowflake读作双引号。

您可能还希望查看STRIP_NULL_VALUE和/或IF_NULL_VALUE

显示如何通过REGEXP_REPLACE屠宰JSON

不是说您应该这样做,但是您还没有说出您真正想做的事情:

SELECT 
    column1,
    parse_json(column1) as json,
    REGEXP_REPLACE( json::text , '"null"',  '"DOGS"') AS fiddled_string,
    parse_json(fiddled_string) as back_to_json_data_again
    
FROM VALUES ('{
  "Type": "xxi",
  "Quantity": "null",
  "ContactPerson": "null",
  "Email": null
}')

给予:

COLUMN1 JSON fiddled_string Back_to_JSON_Data_Again
{";Type";:";xxi";,";Quantity";:";null";,";ContactPerson";:";null";,";email";:null} {";ContactPerson";:";null";,";email";:null,";Quantity";:";null";,";Type";:";xxi";} {";ContactPerson";:";DOGS";,&Quot;电子邮件&Quot;:空,&Quot;数量&Quot;:&Quot;狗&Quot;,&Quot;类型&Quot;:&Quot;xxi&Quot;} {";ContactPerson&Quot;:";Dogers&Quot;,";Email&Quot;:NULL,&Quot;Quantity&Quot;:&Quot;Drivers&Quot;,&Quot;Type&Quot;:&Quot;xxi";}

这篇关于正则表达式以查找列中的空值(&QOOT;NULL&QOOT;VALUE)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆