用于从列中查找 "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" }
我有专栏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" } |