sqlite在日期上和有些sql不太一样,不管是查询还是数据本身,都有自已的特定的要求。这个要求就是,日期一定需要满足标准化要求。
以下用Julia语言来进行说明。
一、不是标准化的日期数据输入
我们做一个试验,日期格式是2014-9-15之类,并不是标准的2014-09-15,2014-10-06类。共insert 四条数据,包括日期类的数据。
using sqlite;
db=sqliteDB("C:\\Users\\Administrator\\Desktop\\sqliteData\\sqliteDB.db")
query(db,"CREATE TABLE newTest (DTime VARCHAR,Price Float)") # 建立一个新的表,newTest
append(db,"newTest",["2014-9-15T09:15.123" 3056.50]) # 在 insert 一条不标准的日期数据格式
append(db,["2014-9-15T09:16.123" 3066.50])
append(db,["2014-9-16T09:18.123" 3076.50])
append(db,["2014-10-6T09:18.123" 3076.50])
在这情况下,
如果你用这样的标准的查询条件,其结果,可能是数据库没有反应,要么就是不正常返回。
“SELECT * FROM newTest WHERE DTime> '2014-09-15'”
二、不是标准化的日期查询条件
相反,假定我们在insert 时,是标准的数据输入,但是在查询是,查询条件不标准的话,也是不行的。
不标准的查询格式:
SELECT * FROM newTest WHERE DTime> '2014-9-15' -----看到没,9前面没有带0呀,坑爹的地方,一定要注意!
总结:在日期上,每个小于10的(MM,DD)一定要在前面补上0,这个在数据输入和查询时都至关重要。
三、查询
数据格式对了,在查询上也需要注意。
假定DTime是VARCHAR格式,查询条件可以是
SELECT * FROM newTest WHERE DTime>date("2014-09-17")
SELECT * FROM newTest WHERE DTime>'2014-09-17' -----单引号
但不接受这二种格式,感觉有点怪!
SELECT * FROM newTest WHERE datetime(DTime)>datetime("2014-09-17")
SELECT * FROM newTest WHERE date(DTime)>date("2014-09-17")
再次总结,sqlite在日期上,有点个性,感觉有点怪。