我想在一段时间内选择记录。但是,数据库中的相应数据类型类似于2017-11-13-05-36-25'。我需要先将它转换为datetime格式。使用pyodbc:
进行以下SQL查询connection = pyodbc.connect("Driver={\
ODBC Driver 13 for SQL Server};\
Server=server1,\
100;Database=my_db;\
Uid=abc;\
Pwd=123;\
Encrypt=yes;\
TrustServerCertificate=no;\
Connection Timeout=30;")
cmd = r'SELECT startDate FROM table1 where \
CONVERT (datetime, startDate, 120) between \
CONVERT(datetime, "2017-10-8 00:00:00", 120) and \
CONVERT(datetime,"2017-11-7 00:00:00", 120)'
a = pd.read_sql(cmd, con = connection)
执行后,我收到以下错误:
Error: ('42S22', "[42S22] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Invalid column name '2017-10-8 00:00:00'. (207) (SQLExecDirectW)")
如何获得正确的结果?
答案 0 :(得分:2)
默认情况下,字符串文字由SQL Server中的单引号分隔。双引号表示标识符,例如列或对象名称。
而不是"2017-10-8 00:00:00"
使用'2017-10-8 00:00:00'
而不是"2017-11-7 00:00:00"
。
这将解决您收到的错误。
无效的列名称'2017-10-8 00:00:00'
CONVERT (datetime, startDate, 120)
将使您的查询无法进行查询。它将无法在该列上执行索引范围搜索。 startDate
应使用合适的数据类型(date
/ datetime
/ datetime2
),以便在运行时不需要转换它。