【发布时间】:2021-06-11 05:27:55
【问题描述】:
CREATE TABLE PaL (
id SERIAL PRIMARY KEY,
event_date DATE
);
INSERT INTO PaL
(event_date)
VALUES
('2020-01-01'),
('2020-02-05'),
('2020-03-20'),
('2020-04-15'),
('2020-05-11'),
('2020-06-18'),
('2020-07-19'),
('2020-12-31');
预期结果:
first_date_of_the_month first_timestamp_of_the_month
2020-01-01 2020-01-01 00:00:00
2020-02-01 2020-02-01 00:00:00
2020-03-01 2020-03-01 00:00:00
2020-04-01 2020-04-01 00:00:00
2020-05-01 2020-05-01 00:00:00
2020-06-01 2020-06-01 00:00:00
2020-07-01 2020-07-01 00:00:00
2020-12-01 2020-12-01 00:00:00
我想提取表中每个event_date 的first date 和first timestamp。
我正在使用以下查询执行此操作:
SELECT
DATE_ADD(DATE_ADD(LAST_DAY(pl.event_date), INTERVAL 1 DAY), INTERVAL -1 MONTH) AS first_date_of_the_month,
DATE_FORMAT(DATE_ADD(DATE_ADD(LAST_DAY(pl.event_date), INTERVAL 1 DAY), INTERVAL -1 MONTH), '%Y-%m-%d %H:%i:%s') AS first_timestamp_of_the_month
FROM PaL pl
但是,HeidiSQL 以某种方式将时间戳作为值而不是 TIMESTAMP 格式插入。
我需要如何更改查询以将结果显示为TIMESTAMP?
【问题讨论】:
-
如果
TIMESTAMP是指 Unix 样式的时间戳(自 1970 年以来的秒数),则需要使用UNIX_TIMESTAMP(),但请注意,在许多版本的 MySQL 中,这是 32 位而不是 64 位,因此过期2038.如果要64bit,需要自己计算。我用这个((to_days(expiry_dt)-719528)*86400+time_to_sec(expiry_dt))(用于字段expiry_dt) -
如果你使用日期格式,你可以用
00表示月份styart 之前的日期,如my_date >= "2021-03-00"表示本月的所有内容 - 它与`my_date >= 基本相同"2021-03-01 00:00:00"