1

短版:当我尝试通过 ODBC 使用 Access 的 DatePart 功能时,无法解决。

更长的版本:

我有一个 Microsoft Access 查询,它返回带有时间戳和分数的行。我想按排序,然后按分数排序——实际上是当天的高分表。

为了获得更好的功能,我使用该DatePart功能从时间戳中提取年、月和日中的每一个,ORDER BY然后是分数。

在 Microsoft Access 中,查询效果很好。

但是,当我pyodbc用来访问相同的查询时,ODBC 驱动程序被 DatePart 函数难住了,并认为它是缺少参数的名称。

令我吃惊的是,即使我隐藏了 DatePart 函数,通过创建一个新的 HighScore 查询,然后SELECT * FROM HighScore,它仍然抱怨找不到参数。显然,查询的 SQL 是在该过程的后期才得到解决的。

我的问题是:

  • 如何解析 SQL 中的 DatePart 函数以允许 Access 运行它,或者
  • 什么是通过 ODBC 按时间戳的日期部分排序的正确方法?

添加了附加信息:

看起来有点矫枉过正,但这里有一些代码:

import pyodbc
access_db_path = r"<ellided>"
connection_string = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+access_db_path
connection = pyodbc.connect(connection_string, autocommit = True)

print "First query"
connection.cursor().execute('SELECT ScoreTime FROM SplitExtendedP1')
print "Worked"

print "Second query"
print connection.cursor().execute('SELECT DatePart("yyyy",ScoreTime) FROM SplitExtendedP1')
print "Doesn't get here."

结果如下:

First query
Worked
Second query
Traceback (most recent call last):
  File "<ellided>.py", line 16, in <module>
    print connection.cursor().execute('SELECT DatePart("yyyy", ScoreTime) FROM SplitExtendedP1')
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')
4

2 回答 2

2

您确定在该 SQL 方言中使用引号"yyyy"而不是撇号是有效的吗?'yyyy'

于 2010-10-18T10:16:13.997 回答
2

日期时间作为浮点数存储在 access 中。小数点左边的数字是日期,小数点右边的小数部分是时间(以一天的小数表示;即,0.5 = 中午)。

如果要按天排序,可以简单地使用 Int() 函数返回日期时间字段的整数部分。

于 2010-10-18T13:57:08.693 回答