如何防止无效日期插入SQLite表?

时间:2014-08-03 02:38:41

标签: database validation datetime sqlite

SQLite表不能包含日期或时间戳类型的列。日期存储为文本或数字。

情况就是这样:

  • 如何防止像2月31日这样的无效日期被插入表格?

我知道您可以在插入之前在应用程序中验证日期,但这不是我正在寻找的,因为这不会阻止使用SQLite输入无效日期提示或使用一些SQLite GUI工具。

1 个答案:

答案 0 :(得分:4)

built-in date functions在无法解释其日期参数时返回NULL,因此您可以添加一个不会发生这种情况的检查:

CREATE TABLE MyLittleTable (
    MyDate CHECK (date(MyDate) IS NOT NULL)
);

但是,这些功能没有做太多检查:

> SELECT date('2014-02-31');
2014-02-31

要标准化日期,您必须对其进行一些计算:

> SELECT date('2014-02-31', '+0 days');
2014-03-03

因此,您可以检查此规范化是否不会更改值:

CREATE TABLE MyLittleTable (
    MyDate CHECK (date(MyDate,'+0 days') IS MyDate)
);

(正确处理NULL需要IS。)