将数据库中的日期值与日期字面量进行比较

1 投票
2 回答
627 浏览
提问于 2025-04-16 23:12

我正在使用ADODB对象从DB2数据库中获取日期值。有时候,这个日期会被设置为1/1/0001。这在SQL Server中是一个无效的日期时间。我需要检查这个值,并把它设置为一个有效的SQL Server日期(比如1/1/1900)。从ADODB获取的对象看起来像是一个time.struct_time。那么,如何将1/1/0001转换为time.struct_time对象,并检查它是否与从DB2数据库中获取的相同值相等呢?

编辑:

我对发生的事情有了更多的了解。我之前尝试过d0nut建议的方法,但比较仍然失败。当我打印time.strptime('1/1/0001', '%d/%m/%Y')的返回值时,得到的是1/1/2001,而不是1/1/0001。当我尝试调用time.asctime(timeFromDb2)(即使是从数据库中获取的有效日期值)时,我得到这个异常信息:argument must be 9-item sequence, not time。我猜测从数据库获取的time对象是无效的,但因为这个脚本除了将它传递给另一个连接到SQL Server的ADODB Recordset对象外没有做其他事情,所以一切都在正常工作。有没有人有建议我该如何继续?下面是从DB2获取日期并存储到SQL Server数据库的代码。这段代码已经运行了很多年,直到今天我们开始从DB2获取1/1/0001的值。InventoryCoils对象都是通过调用win32com.client.Dispatch("ADODB.Recordset")创建的。

self.Inventory.Fields("promised_date").Value   = self.Coils.Fields("csaxdz").Value

2 个回答

0
>>> time.strptime('1/1/0001', '%d/%m/%Y')
time.struct_time(tm_year=1, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

这样你就能得到一个结构体,方便你进行比较。

1

你可以把它转换成一个字符串:

time.strftime('%d/%m/%Y', badtimeobj)

然后这样进行比较,或者

try:
    time.asctime(timeFromDb2)
except:
    invalid = True
else:
    invalid = False

如果其他所有日期在 asctime 中都能正常工作,那也可以用类似的方法。

撰写回答