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

Tul*_*ova 2 database sqlite validation datetime

SQLite 表不能有日期或时间戳类型的列。日期以文本或数字形式存储。

原来如此:

  • 如何防止将 2 月 31 日等无效日期插入表中?

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

CL.*_*CL. 5

当内置日期函数无法解释其日期参数时,它们会返回 NULL,因此您可以添加一个检查以确保不会发生这种情况:

CREATE TABLE MyLittleTable (
    MyDate CHECK (date(MyDate) IS NOT NULL)
);
Run Code Online (Sandbox Code Playgroud)

然而,这些函数不做太多检查:

> SELECT date('2014-02-31');
2014-02-31
Run Code Online (Sandbox Code Playgroud)

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

> SELECT date('2014-02-31', '+0 days');
2014-03-03
Run Code Online (Sandbox Code Playgroud)

因此您可以检查此标准化不会更改值:

CREATE TABLE MyLittleTable (
    MyDate CHECK (date(MyDate,'+0 days') IS MyDate)
);
Run Code Online (Sandbox Code Playgroud)

IS需要正确处理 NULL。)