【问题标题】:Data Conversion using pyodbc to query iSeries database - Conversion error使用 pyodbc 查询 iSeries 数据库的数据转换 - 转换错误
【发布时间】:2016-09-15 19:46:41
【问题描述】:

我正在尝试根据返回为 Decimal(160919, ) 的 Zoned Decimal 值过滤记录。我如何使用它来过滤日期(即:160919) 下面是我用来提取订单数据的代码:

#connect to APlus
import pyodbc
import time
import cursor as cursor


today = int(time.strftime("%y%m%d"))
whatisit = type(today)
print whatisit
cnxn = pyodbc.connect('DSN=aplus; uid=username;pwd=password')
cursor = cnxn.cursor()
query = """ select OHORNO, OHRSDT
            from ORHED
            where OHCSNO = 206576  and CAST(OHRSDT AS INT) = '$[today]'"""
cursor.execute(query)
row = cursor.fetchall()
if row :
    print(row)

print ("Today : " + today)

【问题讨论】:

  • 如果只是为了后代,请更新问题以发布表 ORHED 的字段 OHRSDT 的 DDL,以及表达式 '$[today]' 的解析值;例如通过为名为 query', as something like, and perhaps this is the effect: ... 和 CAST(OHRSDT AS INT) = '160919'` 的变量的赋值提供字符串结果 注意:最好将文字选择值强制转换为匹配列,而不是其他方式 [显示],但是这是可选的,因为文字会被隐式转换。

标签: python sql ibm-midrange pyodbc db2-400


【解决方案1】:

记录中的日期末尾有一个空格。我使用 Left(OHEXDT, 6) 进行比较,一切都按预期工作。

这实际上仅适用于孤立事件,然后失败了。

我现在使用子字符串以我需要比较它们的格式提取数字。

where OHCSNO = 206576 and integer(substr(OHESDT,1,6)) = '160926'

谢谢!

【讨论】:

  • The Date field is a zoned decimal field. 如果是,则末尾不应有空格,除非在语句中返回值之前以某种方式添加了尾随空格,或者它是 DDS 源文件并且某些程序是将不良数据放入现场。无论哪种方式,您都应该找出原因,因为未来可能会在不可预测的时间出现类似的问题。
  • @user2338816 我返回的数据是: (Decimal('160919'), ) 我正在尝试提取 '160919' 作为比较值。你认为这是可能的吗?谢谢!
  • 这似乎是 YYMMDD 格式的 DECIMAL (6,0) 值。也就是说,没有给出世纪数字。它看起来像 2016-09-19 或 CURRENT DATE,格式可能不正确。
  • @user2338816 我明白了,有没有办法提取值的 6 位数字部分?这是我们 AS400 系统中日期的标准格式。感谢您的帮助。
  • 这还和OP有关吗?似乎距离很远,现在还不清楚哪里有问题。您是否需要从 SELECT 语句中的“日期”数值返回 6 个字符?或者您是否试图让 python 将数值转换为 6 个字符?还是……?
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2016-10-08
相关资源
最近更新 更多