У меня есть таблица с некоторыми кодовыми точками (например, &), которую я хочу вырезать из текстового значения в BigQuery.
Моя стратегия состоит в том, чтобы использовать замену регулярного выражения для числа, заменяя число надопустимый символ.
Если я попытаюсь:
WITH items as (SELECT "Test & " as item)
SELECT
CODE_POINTS_TO_STRING([SAFE_CAST(REGEXP_EXTRACT(item, r"&#([0-9]{2})") AS INT64)]) as test_replace
FROM items
Это выдаст желаемый вывод для записи
[
{
"test_replace": "&"
}
]
Если я попытаюсь:
WITH items as (SELECT "Test & " as item)
SELECT
REGEXP_REPLACE(
item,
r"&#([0-9]{2});",
CODE_POINTS_TO_STRING([SAFE_CAST("\\1" as INT64)])
) as full_replace
FROM items
Это приведет к нулевому выводу
[
{
"full_replace": null
}
]
Однако, если я жестко закодирую значение в:
WITH items as (SELECT "Test & " as item)
SELECT
REGEXP_REPLACE(
item,
r"&#([0-9]{2});",
CODE_POINTS_TO_STRING([SAFE_CAST("38" as INT64)])
) as full_replace
FROM items
Это работает.
[
{
"full_replace": "Test & "
]
Я знаю, что регулярное выражение правильно оценивается, как будто я пытаюсь:
WITH items as (SELECT "Test & " as item)
SELECT
REGEXP_REPLACE(
item,
r"&#([0-9]{2});",
CONCAT("\\1", "test")
) as part_replace
FROM ITEMS
Это вернет:
[
{
"part_replace": "Test 38test "
}
]
Поэтому мой вопрос, как мне получить функцию SAFE_CAST () дляоценить соответствие регулярному выражению (кажется, что оно вычисляет строковый литерал).