我正在创建一个包含日期注册列的表。我希望它格式化为" YYYY-MM-DD"。我已经尝试过了......
java.lang.ClassNotFoundException: com.example.service.AccountServiceRemote
现在,我遇到的问题是,当我以不同的格式输入日期(即11-05-2015)时,它会在表格中接受该日期。它不应该给我一个错误信息或将其重新格式化为我设置的格式吗? (我更喜欢后者,除非数据输入错误,即32-13-20015)
有人能让我知道我做错了吗?
亲切的问候。
答案 0 :(得分:0)
有两种不同的东西在起作用:
使用SQLite时很容易混淆这两者,甚至更多。
但是,将日期作为文本存储在数据库中并不是一个好主意。这意味着数据库可以存储无效日期,例如“ABC”,还可以存储“2015-13-01”和“2015-02-29”。
此外,数据库的日期数字表示比10个字符的字符串更快。使用数字表示,您可以更轻松地进行日期计算,例如将日期添加到日期(+1),而使用更复杂的字符串表示。
这是一个建议:
像这样创建你的表:
CREATE TABLE patient(
dateregistered int not null
);
并插入如下值:
insert into patient values (julianday('2015-12-31'));
通过此设置,无效日期将变为有效日期或被拒绝。例如:
julianday('2015-02-29')
将导致2015-03-01存储在表格中。这个:
julianday('2015-13-20')
将变为NULL值,在插入时触发错误。
实际上无法插入不是有效日期的内容。
您将以可读格式获取日期:
select date(dateregistered)
from patient
date 函数负责格式化为YYYY-MM-DD。
但您也可以进行计算,例如添加一天:
select date(dateregistered+1)
from patient
或者,如果您还有另一个日期,例如 dateinvited ,您可以轻松获得这两个事件之间的天数:
select dateinvited - dateregistered
from patient
如果您想要以YYYY-MM-DD格式查询日期时发现指定date(...)
很麻烦,那么请创建一个为您执行此操作的视图:
create view vw_patient as
select date(dateregistered) dateregistered
from patient
现在当你从那个视图中选择时:
select dateregistered
from vw_patient
你会得到一个字符串:
2015年2月28日