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

使用pyodbc连接SQL Server时实时获取当前分钟数据报错求助

解决SQL Server中获取当前分钟数据的语法问题

你误用了MySQL的MINUTE()和NOW()函数,SQL Server有对应的替代语法,同时要注意:仅匹配分钟数会导致跨小时的相同分钟数据被误选,正确逻辑应该是匹配当前时间所在的完整分钟区间(年、月、日、小时、分钟完全一致)。

正确的SQL语法方案

方案1:用DATEPART逐一匹配时间分量

通过DATEPART函数提取时间的各维度分量,分别与当前时间的对应分量对比:

SELECT item 
FROM sys.table1 
WHERE DATEPART(YEAR, Time) = DATEPART(YEAR, GETDATE())
  AND DATEPART(MONTH, Time) = DATEPART(MONTH, GETDATE())
  AND DATEPART(DAY, Time) = DATEPART(DAY, GETDATE())
  AND DATEPART(HOUR, Time) = DATEPART(HOUR, GETDATE())
  AND DATEPART(MINUTE, Time) = DATEPART(MINUTE, GETDATE())

方案2:截断时间到分钟(更简洁高效)

用DATEADD和DATEDIFF把Time列和当前时间都截断到分钟级别,直接对比:

SELECT item 
FROM sys.table1 
WHERE DATEADD(MINUTE, DATEDIFF(MINUTE, 0, Time), 0) = DATEADD(MINUTE, DATEDIFF(MINUTE, 0, GETDATE()), 0)

原理是计算时间距离0点的分钟数,再转换回时间,自动去掉秒和毫秒,只保留到分钟维度。

修改后的Python代码

替换cursor.execute中的SQL语句即可,以下是完整代码:

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=RON\SQLEXPRESS;'
                      'Database=sys;'
                      'Trusted_Connection=yes;')

cursor = conn.cursor()
# 使用方案2的简洁写法
cursor.execute('''
SELECT item 
FROM sys.table1 
WHERE DATEADD(MINUTE, DATEDIFF(MINUTE, 0, Time), 0) = DATEADD(MINUTE, DATEDIFF(MINUTE, 0, GETDATE()), 0)
''')

for i in cursor:
    print(i[0])  # 直接输出item内容,避免打印元组格式

当当前时间为2023-06-30 00:01:00时,运行代码会输出:

Orange
Banana

内容的提问来源于stack exchange,提问作者panzer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:07:00