【发布时间】:2016-08-15 08:05:17
【问题描述】:
在我的数据库中,我将时间戳存储在 TIMESTAMP 字段中,表结构是:(此时很难将其更改为存储类似 unix epoch 的 int)
CREATE TABLE timer (
[id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[topic] VARCHAR(60) NOT NULL,
[desc] VARCHAR(500) NULL,
[project] INTEGER NOT NULL,
[start] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
[end] TIMESTAMP NULL,
[user] INTEGER NOT NULL
)
现在我需要选择开始日期在某个月份的行。我以为我可以这样做:
SELECT * FROM timer WHERE start LIKE "%month/%/year%"
但它不起作用。但如果我只是做类似的事情:
SELECT * FROM timer WHERE start LIKE "%8%"
它运行并选择开始日期为 8 月的所有行(以及时间为 8 的行,呵呵)
我尝试将问题缩小到:
SELECT * FROM timer WHERE start 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:
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')
【问题讨论】:
-
您能提供一个 INSERT 示例吗?你用的是什么客户端?
-
@cartant 我不明白插入示例如何与问题相关?对于我正在使用 SQLite 管理员sqliteadmin.orbmu2k.de 的客户端:)
-
这很重要,因为你可以将任何你喜欢的东西塞进 SQLite 的列中,除非你已经编写了自己的触发器来强制执行类型约束。无论如何,我已经回答了这个问题。
-
我修复了答案中的一堆错误 - 这里是早点和咖啡前。有时使用其他工具查看数据库会很有用。我使用的是SQLiteSpy。
-
@cartant 啊我明白了,我在主帖中添加了一个 INSERT,现在我正在查看您的答案
标签: sqlite