sqlite 在SQL中创建日期格式的日期列

vc6uscn9  于 2023-04-12  发布在  SQLite
关注(0)|答案(2)|浏览(196)

我正在创建一个包含日期注册列的表。我希望它的格式为“YYYY-MM-DD”。我已经尝试过了…

CREATE TABLE patient(
    dateregistered text format 'YYYY-MM-DD' not null
);

现在,我遇到的问题是,当我以不同的格式输入日期 (即11-05-2015) 时,它接受表中的日期。它不应该给我一个错误消息或将其重新格式化为我设置的格式吗?(我更喜欢后者,除非数据输入错误,即32-13-20015)
有人能告诉我我做错了什么吗?
亲切的问候。

daolsyd0

daolsyd01#

有两件不同的事情在起作用:
1.数据库中存储日期的格式
1.显示日期的格式
很容易混淆这两者,在使用SQLite时更是如此。
但是,将日期以文本形式存储在数据库中并不是一个好主意。这将意味着数据库可以存储无效日期,例如“ABC”,但也可以存储“2015-13-01”和“2015-02-29”。
此外,数据库使用数字表示的日期比使用10个字符的字符串更快。使用数字表示可以更容易地进行日期计算,例如将一天添加到日期(+1),而使用字符串表示则会更复杂。
这里有一个建议:

1.日期存储类型

像这样创建表格:

CREATE TABLE patient(
    dateregistered int not null
);

并插入如下值:

2.插入日期

insert into patient values (julianday('2015-12-31'));

通过此设置,无效日期将被转换为有效日期或被拒绝。例如:

julianday('2015-02-29')

将导致2015-03-01被存储在表中。并且:

julianday('2015-13-20')

将变为NULL值,从而在插入时触发错误。
实际上,插入不是有效日期的内容是不可能的。

3.查询日期

你会得到这样可读格式的日期:

select date(dateregistered)
from   patient
  • date* 函数负责格式设置为YYYY-MM-DD。

但你也可以做计算,比如加上一天:

select date(dateregistered+1)
from   patient

或者,如果你还有另一个日期,比如 dateinvited,你可以很容易地得到这两个事件之间的天数:

select dateinvited - dateregistered
from   patient

4.可选:创建视图

如果您发现无论何时想要查询YYYY-MM-DD格式的日期都指定date(...)很麻烦,那么可以创建一个视图来完成此操作:

create view vw_patient as
select date(dateregistered) dateregistered
from   patient

现在,当您从该视图中选择时:

select dateregistered
from   vw_patient

你会得到一个字符串:
2015-02-28

i2byvkas

i2byvkas2#

SQL(MySQL)中有3种数据类型:
1.数字的
1.文本
1.日期
T0定义一个日期类型的列,可以使用DATE数据类型
示例:

  • create table(NAME varchar(30),Date_of_Birth date)*

相关问题