Как удалить двойные кавычки из строки даты в SQL

#google-bigquery

#google-bigquery

Вопрос:

Я использую JSON_EXTRACT() для извлечения даты из json.

Я хочу получить дату без двойных кавычек.

Вот пример того, что я делаю :

 JSON_EXTRACT(JSON_EXTRACT(events, "$.my_member"), "$.my_Number") as xyz
  

my_number содержит строку даты как «2016-01-01 11:31:25», я хочу это без двойных кавычек.

Я попытался использовать временную метку как :

 timestamp(JSON_EXTRACT(JSON_EXTRACT(events, "$.my_member"), "$.my_Number"))
  

но он возвращает нулевое значение в xyz.

Спасибо.

Ответ №1:

Попробуйте

 JSON_EXTRACT_SCALAR(JSON_EXTRACT(events, "$.my_member"), "$.my_Number")
  

Кроме того, вы должны иметь возможность дополнительно «оптимизировать» свое выражение, создав правильный путь JSON и используя только функции JSON. См. «Подсказку» ниже

 SELECT 
  JSON_EXTRACT_SCALAR(
    '{"my_member":{"my_Number":"2016-01-01 11:31:25"}}', 
    "$.my_member.my_Number"
  )  
  

Смотрите более подробную информацию, а также разницу между JSON_EXTRACT_SCALAR и JSON_EXTRACT в функциях JSON

Комментарии:

1. Это правильный ответ. Скалярная версия предназначена для извлечения скалярных значений, таких как строки.

2. Я использовал JSON_EXTRACT_SCALAR в MySQL Workbench и получил код ошибки: 1305. ФУНКЦИЯ manifest.JSON_EXTRACT_SCALAR не существует. Возможно, я делаю что-то не так (пожалуйста, LMK, если у меня есть). Я нашел альтернативное решение, которое я опубликовал ниже.

3. это был вопрос с тегом BigQuery! :o)

Ответ №2:

Выполнить REPLACE

 REPLACE(JSON_EXTRACT(JSON_EXTRACT(events, "$.my_member"), "$.my_Number"),""","") as xyz
  

Ответ №3:

Я попробовал JSON_EXTRACT_SCALAR в MySQL Workbench, но получил код ошибки: 1305. ФУНКЦИЯ manifest.JSON_EXTRACT_SCALAR не существует

Вместо этого я использовал JSON_UNQUOTE, и это сделало свое дело.

У меня есть столбец с именем buffer_time, который содержит:

 '{"after": {"time": "00:01:00", "is_enabled": true}, "before": {"time": "00:04:00", "is_enabled": true}}'
  

JSON_UNQUOTE(JSON_EXTRACT(buffer_time, ‘$.after.time’))
дал мне: `

00:01:00

Надеюсь, это поможет.