SQLite: 关于日期的标准化问题

前端之家收集整理的这篇文章主要介绍了SQLite: 关于日期的标准化问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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在日期上,有点个性,感觉有点怪。

猜你在找的Sqlite相关文章