带正斜杠的SQLite类SELECT查询
在我的数据库中,我将时间戳存储在一个TIMESTAMP字段中,表结构是:(此时很难将其更改为int来存储unix历元之类的内容) 现在我需要选择开始日期在某个月的行。我想我可以做一些事情,比如:带正斜杠的SQLite类SELECT查询,sqlite,Sqlite,在我的数据库中,我将时间戳存储在一个TIMESTAMP字段中,表结构是:(此时很难将其更改为int来存储unix历元之类的内容) 现在我需要选择开始日期在某个月的行。我想我可以做一些事情,比如: SELECT * FROM timer WHERE start LIKE "%month/%/year%" SELECT * FROM timer WHERE start LIKE "%8%" 但它不起作用。但如果我只是做一些类似的事情: SELECT * FROM timer WHERE star
SELECT * FROM timer WHERE start LIKE "%month/%/year%"
SELECT * FROM timer WHERE start LIKE "%8%"
但它不起作用。但如果我只是做一些类似的事情:
SELECT * FROM timer WHERE start LIKE "%month/%/year%"
SELECT * FROM timer WHERE start LIKE "%8%"
它运行并选择开始日期为8月的所有行(以及时间为8的行)
我试图将问题缩小到:
SELECT * FROM timer WHERE start LIKE "%/%"
并发现如果like字符串包含正斜杠/
,则查询将完全不返回任何内容。我试着逃过刀口,但没有改变任何事情
当我包含正斜杠时,为什么我的查询不起作用
以下是表格中的一些示例数据:
id topic desc project start end user
1 Topic 1 A Desc. 1 8/12/2016 11:34:09 PM 8/12/2016 11:34:15 PM 1
2 Topic 2 A 2ndDesc. 1 8/13/2016 12:55:44 AM 8/13/2016 12:55:49 AM 1
编辑:
根据要求,这里有一个插入:
INSERT INTO timer (`topic`, `project`, `desc`, `start`, `end`, `user`) VALUES ('My Topic', '1', 'This is a Desc', '2016-08-15 10:03:41', '2016-08-16 12:03:41', '1')
SQLite的
TIMESTAMP
类型将日期/时间存储为字符串(SQLite中有):
2016-08-14 21:00:42
它不包含斜杠。在显示数据时,数据可能正在重新格式化
SQLite不约束数据类型,因此可能插入非ISO8601字符串。它取决于SQLite库和INSERT
语句。但是,您的start
列被定义为TIMESTAMP DEFAULT\u CURRENT TIMESTAMP
,因此start
的默认值将是ISO8601字符串。如果时间格式不一致,则无法查询数据
ISO8601格式是可排序的,因此可以使要执行的SELECT
更高效:
SELECT * FROM timer WHERE start >= :from AND start < :to
你能提供一个插入示例吗?您使用的是什么客户机?@cartant我不明白插入示例与问题有何关联?对于我使用的客户端SQLite Administrator:),这很重要,因为您可以将任何喜欢的内容放入SQLite中的列中,除非您编写了自己的触发器来强制执行类型约束。不管怎样,我已经回答了这个问题。我修正了答案中的一系列错误——这里是咖啡前的时间。有时,使用另一个工具查看数据库会很有用。我使用的是。@cartant啊,我明白了,我在主帖中添加了一个插入,现在我在看你的回答谢谢你解释时间戳类型,我知道SQLite没有真正的时间戳类型,因为我在任何地方都找不到它的页面,我很好奇它是如何工作的:)我在SQLiteSpy中打开了同一个数据库,果然,日期分隔符显示为破折号。我用破折号而不是斜杠重新运行了我的查询,并且年和月的顺序正确,它正常工作。感谢您选择的例子,它的作品完美!我以前不需要在SQL数据库中处理太多的日期和时间,所以这对我来说是一次学习经历:)