首页 新闻 会员 周边

Sqllite 时间转换

0
悬赏园豆:100 [已解决问题] 解决于 2018-04-12 13:01

数据里时间的存储格式如下:
2010-5-5
类型是字符串
也就是,不是标准的日期格式yyyy-mm-dd
现在想查询某个时间段内的数据,比如
select * from table1 where date between '2010-01-01' and '2012-01-01';
由于存储的时间不是标准yyyy-mm-dd格式,所以总是失败,请问SQL有这种语句自动把2010-3-3 变为 2010-03-03的功能吗?
感谢!!

赵大大的主页 赵大大 | 初学一级 | 园豆:1
提问于:2018-04-12 11:05
< >
分享
最佳答案
0

1、如果可能,换成日期格式。

2、次之换成标准日期格式的字符串,就是2010-03-03这样的。

以上两种都是建议在设计阶段修改,或者修改代码,或者运行数据修改软件将历史数据全部升级。

3、最次才是在查询的时候变换。这将导致很差的查询性能,当然你钱多拼命升级服务器硬件也可以先顶一阵子。

收获园豆:100
爱编程的大叔 | 高人七级 |园豆:30839 | 2018-04-12 11:24

嗯 谢谢我也想过,最好是在添加的时候就将格式弄成标准的,现在程序正在用着呢,之前的数据修改的话太过麻烦,所以想着能不能转换一下,

赵大大 | 园豆:1 (初学一级) | 2018-04-12 11:28

@赵大大: 太过麻烦?这就和程序员说英文不好一样,什么时候学都是不晚的。

既然你先麻烦,那么有两种解决方案如下:

1、在客户端,动态拆解查询日期,比如 2012-01-01   至 202-03-15 拆成为

(between 2012-1-1 and 2012-1-9) or (between 2012-1-10 and 2012-1-31) or ....

这样其实性能比第二种方法好。

2、SQL 语句方法

先将日期字符串转换为日期(要求能正常转换,如果不行,自己想办法),然后再比较,至于

字符转日期函数 自己搜索一下就有了,不需要问别人的,

现成的饭在这儿 https://www.tutorialspoint.com/sqlite/sqlite_date_time.htm

爱编程的大叔 | 园豆:30839 (高人七级) | 2018-04-12 11:48

@爱编程的大叔: 我现在直接把格式弄成正常的格式,之前的数据在做修改吧,毕竟这是正常的方式。

赵大大 | 园豆:1 (初学一级) | 2018-04-12 13:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册