如何解决当两个日期之一仅存储年而不存储月或日时,如何在MySQL中使用日期算术?
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
我们可以看到某些函数不喜欢不完整的日期:
某些日期函数可以使用“零”日期或不完整的日期(例如“ 2001-11-00”),而其他一些则不能。
我想减去两个日期,
SELECT DATEDIFF(CURRENT_DATE(),birthdate)
birthdate
是根据phpMyAdmin控制台的DATE
列。
但是某些出生日期没有月份或日期,例如'1874-00-00'
。您无法获得天数差异,因为天数未知。
是否有办法告诉它假设1月1日还是什么?还是我需要依靠自己来建立日期,以便它识别出来?
我真的只需要大约几年的差异。但是我得到NULL
。
谢谢。
解决方法
仅使用您所在领域的YEAR并进行简单的减法:
SELECT YEAR(NOW())-YEAR(birthdate) FROM YOUR_TABLE_NAME;
在有效日期和无效日期都可以使用
,如果您有类似'1874-00-00'
的日期,则该列的数据类型为VARCHAR
,除非您禁用了默认启用的NO_ZERO_IN_DATE
模式。
我真的只需要大约几年的时间差
如果年份中始终包含年份,并且开始时是4位数字,那么您所需要做的就是从当前年份中减去日期:
SELECT birthdate,YEAR(NOW()) - birthdate AS age
FROM tablename
MySql会将birthdate
隐式转换为仅代表年份的整数。
对于此示例数据:
CREATE TABLE tablename(birthdate VARCHAR(20));
INSERT INTO tablename(birthdate) VALUES
('1950-05-15'),('1960-08-00'),('1970-00-00');
结果将是:
| birthdate | age |
| ---------- | --- |
| 1950-05-15 | 70 |
| 1960-08-00 | 60 |
| 1970-00-00 | 50 |
或者,如果您想更准确地说明birthdate
的有效日期,则:
SELECT birthdate,COALESCE(
TIMESTAMPDIFF(YEAR,birthdate,NOW()),YEAR(NOW()) - birthdate
) age
FROM tablename
请参见demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。