【发布时间】:2014-04-16 04:45:05
【问题描述】:
我想从 qry 结果创建一个表。以下 qry 运行正常:
create table x select
date_format(TERMINATION_DT,'%Y-%m-%d') as Term_Date
, date_format(BIRTH_DT,'%Y-%m-%d') as DOB
from dashboard_04102014
where status = 'withdrawn';
有一些termination_dt 值为空''。 where status = 'withdrawn' 过滤掉空值。但是,当我尝试使用以下 qry 执行日期计算时,我收到一条错误消息:
create table x select
date_format(TERMINATION_DT,'%Y-%m-%d') as Term_Date
, round(datediff(date_format(TERMINATION_DT,'%Y-%m-%d'), date_format(BIRTH_DT,'%Y-%m-%d'))/365,0) as Age
from dashboard_04102014
where status = 'withdrawn';
这是错误信息:
incorrect datetime value" '0000-00-00'
我猜那些空的termination_dt 值被转换为0000-00-00 从而抛出datediff?但是这些值首先被 where 子句过滤掉了。
另外,我可以完美地运行select 部分,它会返回我想要的结果。但是当我想从中创建一个表时,我收到了第二个 qry 的错误消息。为什么我可以使用第一个 qry 而不是第二个创建表?
谢谢!
添加原始表格条:
CREATE TABLE dashboard_04102014
(`status` varchar(9), `termination_dt` int, `birth_dt` int);
INSERT INTO Table1
(`status`, `termination_dt`, `birth_dt`)
VALUES
('Active', 0, 19560329),
('Withdrawn', 20070208, 19690131),
('Withdrawn', 20090702, 19441219),
('Active', 0, 19520912),
('Withdrawn', 20130730, 19480404);
【问题讨论】:
-
termination_dt和birth_dt上定义的实际数据类型是什么?他们是date、datetime、timestamp还是别的什么? -
在创建的表
x上运行select并查看记录的日期格式和值是否正确。 -
可能有点矫枉过正,但尝试将值转换为最新:
cast(date_format(termination_dt, '%Y-%m-%d') as date) -
@Ravinder -
termination_dt和birth_dt的原始数据类型是integer,即20110101、20110201、20140401等。但是有很多行不t 具有termination_dt的值。所以转换为日期后,新值为0000-00-00。我不知道这是否会影响计算。 -
don't have value是什么意思?它们是空的''还是NULL?
标签: mysql date create-table