用于从列中查找 "null" 值的正则表达式

regex to find "null" values from a column

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

SELECT
     AS "JSON_DATA"
 FROM TEST_TABLE 

数据可能是这样的:

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

此字段中的某些值为“空”。我想用正确的 NULL 值搜索所有引用的“null”和 replace/regex_replace 它们。

想要的输出结果:

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

我试过这个:

SELECT
    REGEXP_REPLACE(  , "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(  , '"null"',  NULL) AS "JSON_DATA"
 FROM TEST_TABLE 

但不是在每行的 json 对象中查找和替换所有“null”,最终结果只是所有行都为 NULL。

双引号需要在普通字符串中

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

如您所见,数据库正在寻找名为 null 的列,雪花将双引号读作。

您可能还想看看 STRIP_NULL_VALUE and/or 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","Email":null,"Quantity":"DOGS","Type":"xxi"} { "ContactPerson": "DOGS", "Email": null, "Quantity": "DOGS", "Type": "xxi" }