Если у вас нет доступа к JSON_VALUE()
, я бы порекомендовал следующее регулярное выражение, если вы не всегда знаете положение клавиши day
в строке JSON:
SELECT REGEXP_REPLACE(col, '^.*"day":"(\d+)".*$', '\1') AS day
FROM mytable;
Это заменит всю строку (при условии, что она совпадает!) С содержимым первой группы захвата (заключенной в круглые скобки: (\d+)
). \d
обозначает цифру 0-9
. Если вы также хотите вернуть значения NULL, вы можете заменить \d+
на \d*
. Если возможны отрицательные или нечисловые значения, я бы порекомендовал следующее:
SELECT REGEXP_REPLACE(col, '^.*"day":"[^"]*".*$', '\1') AS day
FROM mytable;
Это вернет все символы, которые могут содержаться в клавише day
.
К вашему сведению, если у вас есть значение, числовое или не имеющее значения, вы можете безопасно преобразовать его в число, используя TO_NUMBER()
вместе с REGEXP_SUBSTR()
:
SELECT COALESCE( TO_NUMBER( REGEXP_SUBSTR( REGEXP_REPLACE( col, '^.*"day":"[^"]*".*$', '\1' ), '\d+' ) ), 0 ) AS day
FROM mytable;
Надеюсь, это поможет.