我正在创建一个包含日期注册列的表。我希望它的格式为“YYYY-MM-DD”。我已经尝试过了…
CREATE TABLE patient(
dateregistered text format 'YYYY-MM-DD' not null
);
现在,我遇到的问题是,当我以不同的格式输入日期 (即11-05-2015) 时,它接受表中的日期。它不应该给我一个错误消息或将其重新格式化为我设置的格式吗?(我更喜欢后者,除非数据输入错误,即32-13-20015)
有人能告诉我我做错了什么吗?
亲切的问候。
2条答案
按热度按时间daolsyd01#
有两件不同的事情在起作用:
1.数据库中存储日期的格式
1.显示日期的格式
很容易混淆这两者,在使用SQLite时更是如此。
但是,将日期以文本形式存储在数据库中并不是一个好主意。这将意味着数据库可以存储无效日期,例如“ABC”,但也可以存储“2015-13-01”和“2015-02-29”。
此外,数据库使用数字表示的日期比使用10个字符的字符串更快。使用数字表示可以更容易地进行日期计算,例如将一天添加到日期(+1),而使用字符串表示则会更复杂。
这里有一个建议:
1.日期存储类型
像这样创建表格:
并插入如下值:
2.插入日期
通过此设置,无效日期将被转换为有效日期或被拒绝。例如:
将导致2015-03-01被存储在表中。并且:
将变为NULL值,从而在插入时触发错误。
实际上,插入不是有效日期的内容是不可能的。
3.查询日期
你会得到这样可读格式的日期:
但你也可以做计算,比如加上一天:
或者,如果你还有另一个日期,比如 dateinvited,你可以很容易地得到这两个事件之间的天数:
4.可选:创建视图
如果您发现无论何时想要查询YYYY-MM-DD格式的日期都指定
date(...)
很麻烦,那么可以创建一个视图来完成此操作:现在,当您从该视图中选择时:
你会得到一个字符串:
2015-02-28
i2byvkas2#
SQL(MySQL)中有3种数据类型:
1.数字的
1.文本
1.日期
T0定义一个日期类型的列,可以使用DATE数据类型
示例: