Teradata不接受pandas日期变量,执行SQL查询报无效日期错误
Teradata传入pandas生成日期参数报错22008的解决方法
报错22008的核心原因是Teradata数据库解析你传入的日期字符串时,和默认的日期识别格式不匹配,无法将你传入的
YYYY-MM-DD格式字符串识别为合法日期类型。
- 方法1:SQL中显式指定日期参数的格式
不用修改Python侧的日期生成逻辑,只需要调整查询语句中的WHERE条件,通过CAST关键字明确告诉Teradata你传入的字符串格式:tran = '''SELECT TRAN.ACCOUNT_NUMBER, TRAN.DATE from TRANSACTION TABLE TRAN where TRAN.DATE >= CAST(? AS DATE FORMAT 'YYYY-MM-DD') AND TRAN.DATE < CAST(? AS DATE FORMAT 'YYYY-MM-DD') ''' - 方法2:调整Python侧输出的日期字符串格式为Teradata默认格式
先执行简单查询确认你的Teradata实例默认日期格式:SELECT CURRENT_DATE,根据返回结果调整strftime的格式参数,比如默认格式为YYYY/MM/DD的话,修改日期生成代码:date_from_1 = pd.to_datetime('2021-09-29').strftime('%Y/%m/%d') date_to_1 = pd.to_datetime('2021-10-30').strftime('%Y/%m/%d') - 方法3:直接传datetime对象而非字符串
不用手动将datetime转成字符串,Teradata ODBC驱动会自动适配datetime类型的参数,完全规避字符串解析错误。如果遇到pandas Timestamp类型适配问题,可以转成Python原生datetime:date_from_1 = pd.to_datetime('2021-09-29').to_pydatetime() date_to_1 = pd.to_datetime('2021-10-30').to_pydatetime()
内容的提问来源于stack exchange,提问作者R Sta
相关产品推荐
相关产品推荐

