我有一个简单的查询,可以将VARCHAR列转换为datetime(我在这里提供的查询甚至是一个简单的版本,说明了这个问题)。直接在mysql中执行时,查询按预期运行:
mysql> SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t;
+----------+
| t |
+----------+
| 13:35:00 |
+----------+
但是,当我在torndb中运行完全相同的查询时:
^{pr2}$我得到以下警告(conn的构造正确使用torndb.连接)公司名称:
/Library/Python/2.7/site-packages/torndb.py:226: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
return cursor.execute(query, kwparameters or parameters)
>> None
进一步研究mysqldb,问题似乎与之相关:
conn = db.connect("localhost", 'xxx')
c = conn.cursor()
c.execute("SELECT STR_TO_DATE('01:35 PM', '%%h:%%i %%p') as t")
main:1: Warning: Incorrect datetime value: '01:35 PM' for function str_to_date
1L
但是,当我删除双%%时,效果很好:
c.execute("SELECT STR_TO_DATE('01:35 PM', '%h:%i %p') as t")
1L
c.fetchone()
(datetime.timedelta(0, 48900),)
不知道这是怎么回事。。。在
Torndb打开SQL模式“传统”,这在mysql服务器上启用了许多选项。其中包括NO-uzero-unu-DATE和NO-uzero-IN-DATE,这使得服务器对无效的日期和日期时间更加严格。在本例中,STR_TO_DATE应该返回一个时间,而不是一个DATETIME,因此它不应该受到影响,但是在内部它似乎触发了对时间戳的缺失日期部分的某种检查。这看起来像是mysql中的一个bug。最简单的解决方法是不使用传统模式(或者至少取消设置NO_ZERO_IN_DATE标志)。在
相关问题 更多 >
编程相关推荐