You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pyodbc.Row对象转换为datetime标量或指定格式的时间字符串?

解决pyodbc查询SQL Server datetime列的格式问题

我之前也碰到过一模一样的情况,pyodbc返回的pyodbc.Row初看确实有点让人困惑,但其实处理起来很简单,给你几个实用的方案:

方案1:提取datetime对象后格式化字符串

首先得明确:pyodbc.Row里的元素本身就是Python的datetime.datetime对象,你看到的(datetime.datetime(2017, 3, 20, 8, 0), )只是它的打印表现形式。你只需要先把它从行对象里取出来,再用strftime方法转成你要的格式:

import pyodbc
import datetime

# 假设你已经完成连接和游标初始化
cursor = conn.cursor()
cursor.execute("SELECT your_datetime_column FROM your_table WHERE ...")
row = cursor.fetchone()

# 从行对象中提取datetime对象
dt_obj = row[0]
# 格式化为指定的字符串格式
formatted_date = dt_obj.strftime("%Y-%m-%d %H:%M")
print(formatted_date)  # 输出: 2017-03-20 08:00

方案2:在SQL层面直接返回格式化后的字符串

如果你不需要在Python里处理datetime对象,只想直接拿到指定格式的字符串,可以在SQL查询时用CONVERT函数提前完成格式化:

SELECT CONVERT(varchar, your_datetime_column, 120) AS formatted_date
FROM your_table
WHERE ...

这里的120是SQL Server的格式代码,对应yyyy-mm-dd hh:mi:ss的格式,刚好匹配你的需求。查询后直接从pyodbc.Row里取出字符串即可使用。

方案3:直接使用原生datetime对象

如果你的后续操作需要用到datetime对象(比如做时间比较、加减计算),那完全不需要额外转换,直接提取出来用就行:

dt_obj = row[0]
# 示例:判断时间是否在指定范围
if dt_obj > datetime.datetime(2017, 1, 1):
    print("该时间在2017年之后")

内容的提问来源于stack exchange,提问作者Róbert Péczi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:23:30