我愿意根据问题所描述的具有“ YYYY-MM-DD HH:MI:SS.s”格式的数据的列来过滤表。由于这不是Teradata中的默认时间戳格式,因此我尝试进行类型转换。
到目前为止,我已经尝试了以下操作:
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”之间的“ OR”关键字或“)”。
我认为问题在于将格式传递给Teradata。任何帮助表示赞赏。
P.S:VAL1和VAL2是bash变量。
答案 0 :(得分:0)
您传递的变量不带引号,例如
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}'