在 SQL 中创建日期格式的日期列
Creating a date column with date format in SQL
我正在创建一个包含日期注册列的 table。我希望它的格式为 "YYYY-MM-DD"。我已经尝试过了...
CREATE TABLE patient(
dateregistered text format 'YYYY-MM-DD' not null
);
现在,我遇到的问题是,当我以不同的格式输入日期时 (即 11-05-2015),它在 table。它不应该给我一个错误信息或者重新格式化成我设置的格式吗? (我更喜欢后者,除非数据输入错误即32-13-20015)
有人可以告诉我我做错了什么吗?
亲切的问候。
有两个不同的因素在起作用:
- 日期存储在数据库中的格式
- 日期的显示格式
这两者很容易混淆,使用SQLite时更是如此。
但是,将日期作为文本存储在数据库中并不是一个好主意。这意味着数据库可以存储无效日期,例如 "ABC",但也可以存储“2015-13-01”和“2015-02-29”。
此外,与 10 个字符的字符串相比,数据库使用日期的数字表示更快。使用数字表示,您可以更轻松地进行日期计算,例如将日期添加到日期 (+1),而使用字符串表示会更复杂。
这里有一个建议:
1。日期存储类型
像这样创建你的table:
CREATE TABLE patient(
dateregistered int not null
);
并像这样插入值:
2。插入日期
insert into patient values (julianday('2015-12-31'));
通过此设置,无效日期将变为有效日期或被拒绝。例如:
julianday('2015-02-29')
将导致 2015-03-01 存储在 table 中。还有这个:
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 从那个角度看时:
select dateregistered
from vw_patient
你会得到一个字符串:
2015-02-28
我正在创建一个包含日期注册列的 table。我希望它的格式为 "YYYY-MM-DD"。我已经尝试过了...
CREATE TABLE patient(
dateregistered text format 'YYYY-MM-DD' not null
);
现在,我遇到的问题是,当我以不同的格式输入日期时 (即 11-05-2015),它在 table。它不应该给我一个错误信息或者重新格式化成我设置的格式吗? (我更喜欢后者,除非数据输入错误即32-13-20015)
有人可以告诉我我做错了什么吗?
亲切的问候。
有两个不同的因素在起作用:
- 日期存储在数据库中的格式
- 日期的显示格式
这两者很容易混淆,使用SQLite时更是如此。
但是,将日期作为文本存储在数据库中并不是一个好主意。这意味着数据库可以存储无效日期,例如 "ABC",但也可以存储“2015-13-01”和“2015-02-29”。
此外,与 10 个字符的字符串相比,数据库使用日期的数字表示更快。使用数字表示,您可以更轻松地进行日期计算,例如将日期添加到日期 (+1),而使用字符串表示会更复杂。
这里有一个建议:
1。日期存储类型
像这样创建你的table:
CREATE TABLE patient(
dateregistered int not null
);
并像这样插入值:
2。插入日期
insert into patient values (julianday('2015-12-31'));
通过此设置,无效日期将变为有效日期或被拒绝。例如:
julianday('2015-02-29')
将导致 2015-03-01 存储在 table 中。还有这个:
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 从那个角度看时:
select dateregistered
from vw_patient
你会得到一个字符串:
2015-02-28