Как использовать пункт «где» для метаданных метаданных, где данные представлены в формате «ГГГГ-ММ-ДД ЧЧ: MI: SS.s»? - PullRequest
0 голосов
/ 05 марта 2019

Я готов отфильтровать таблицу по столбцу, в котором есть данные в формате «ГГГГ-ММ-ДД ЧЧ: МИ: СС.s», как описано в вопросе.Так как это не стандартный формат метки времени в терадате, я попытался ввести его.

До сих пор я пробовал следующие вещи:

where column_name > ${VAL1}(Timestamp(1),Format'YYYY-MM-DDbHH:MI:SS.s(1)') and column_name < ${VAL2}(Timestamp(1),Format'YYYY-MM-DDbHH:MI:SS.s(1)')

where column_name > ${VAL1}(Timestamp(0),Format'YYYY-MM-DDbHH:MI:SS.s(1)') and column_name < ${VAL2}(Timestamp(0),Format'YYYY-MM-DDbHH:MI:SS.s(1)')

where column_name > ${Val1}(Timestamp(1),Format'YYYY-MM-DDbHH:MI:SS.s(1)bt') and column_name < ${Val2}(Timestamp(1),Format'YYYY-MM-DDbHH:MI:SS.s(1)bt')

Но каждый раз ошибка одна и та же "Синтаксическая ошибка, ожидалось что-то вроде ключевого слова" ИЛИ "или") "между целым числом и целым числом" 13 ".

Я считаю, что проблема заключается в передаче форматак teradata. Любая помощь приветствуется.

PS: VAL1 и VAL2 являются переменными bash.

1 Ответ

0 голосов
/ 05 марта 2019

Вы передаете переменные без кавычек, например,

where column_name > 2019-03-04 12:34:56.7(Timestamp(1) ...

, парсер обрабатывает 2019-03-04 как вычисление и останавливается на 13.

Попробуйте

where column_name > '${VAL1}'(Timestamp(1) ...

И поскольку этот формат равен По умолчанию Teradata вместо приведения к метке времени, лучше использовать литерал:

where column_name > TIMESTAMP '${VAL1}' and column_name < TIMESTAMP '${VAL2}'
...