sqlite中datetime 判断相等时的异常情况

探讨了在SQLite中处理时间比较时遇到的异常问题,通过对比本地数据库文件解决了无法查询特定时间范围数据的问题,解释了SQLite可能采用的字符串比较而非时间比较方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlite处理数据时发现的异常:

语句:select * from CouponPrint where PrintTime<='2013-11-07 14:20:00'

原表:


数据库中明明有这条语句,为什么查找不出来呢?

语句:select * from CouponPrint where PrintTime<='2013-11-07 14:33:00'

却能查询出来,通过上表对比没有发现任何问题。

想了很多可能,最后打开sqlite本地数据库文件核对,终于发现了问题所在:


看出来了么?本地文件存储就是有区别的,2013-11-07 14:20:00和2013-11-07 14:20:00.000不一样。

由此推断,sqlite中对于时间的比对采用的可能是字符串比较,而不是真正的时间比对。

留此为证。兄弟我也认真过。

SQLite和MySQL都是关系型数据库管理系统,它们都支持日期和时间数据类型,但格式约定有所不同。如果你需要在SQLite查询结果中获取MySQL能识别的日期时间格式,通常需要进行一些转换。 SQLite中的`DATETIME`类型默认格式是`YYYY-MM-DD HH:MM:SS.MS`(毫秒),而MySQL的`DATETIME`默认格式则是`YYYY-MM-DD HH:MM:SS`(没有微秒部分)。 从SQLite到MySQL,你需要去掉`.MS`部分,并有可能需要调整时间部分的分隔符,如果SQLite时间有毫秒,可以使用以下Python的例子: ```python import sqlite3 import mysql.connector # 连接到SQLite数据库 sqlite_conn = sqlite3.connect('your_sqlite_db.db') sqlite_cursor = sqlite_conn.cursor() # 获取SQLite中的datetime数据 sqlite_datetime_str = "datetime_column_name" sqlite_result = sqlite_cursor.execute("SELECT datetime_column_name FROM your_table").fetchone()[0] # 转换为MySQL格式 mysql_datetime_str = sqlite_result.split('.')[0] # 去掉毫秒部分 mysql_datetime_format = "%Y-%m-%d %H:%M:%S" # MySQL的日期时间格式 # 将字符串转换为MySQL能接受的datetime对象 mysql_datetime = datetime.datetime.strptime(mysql_datetime_str, mysql_datetime_format) # 连接到MySQL数据库(假设已设置好) mysql_conn = mysql.connector.connect(user='your_username', password='your_password', host='localhost', database='your_mysql_db') mysql_cursor = mysql_conn.cursor() # 准备插入MySQL的数据 query = f"INSERT INTO your_table (datetime_column) VALUES (%s)" mysql_cursor.execute(query, (mysql_datetime,)) # 提交事务并关闭连接 mysql_conn.commit() mysql_conn.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值