数据里时间的存储格式如下:
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、如果可能,换成日期格式。
2、次之换成标准日期格式的字符串,就是2010-03-03这样的。
以上两种都是建议在设计阶段修改,或者修改代码,或者运行数据修改软件将历史数据全部升级。
3、最次才是在查询的时候变换。这将导致很差的查询性能,当然你钱多拼命升级服务器硬件也可以先顶一阵子。
嗯 谢谢我也想过,最好是在添加的时候就将格式弄成标准的,现在程序正在用着呢,之前的数据修改的话太过麻烦,所以想着能不能转换一下,
@赵大大: 太过麻烦?这就和程序员说英文不好一样,什么时候学都是不晚的。
既然你先麻烦,那么有两种解决方案如下:
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
@爱编程的大叔: 我现在直接把格式弄成正常的格式,之前的数据在做修改吧,毕竟这是正常的方式。