📅  最后修改于: 2023-12-03 15:26:18.430000             🧑  作者: Mango
在MySQL中,日期和时间是常用的数据类型之一。它们用于存储日期和时间信息,并支持许多常用的日期和时间操作。
MySQL支持四种日期类型:
DATE
: 用于存储日期值(例如1980-12-31)。TIME
: 用于存储时间值(例如23:59:59)。DATETIME
: 用于存储日期和时间值(例如1980-12-31 23:59:59)。TIMESTAMP
: 与DATETIME类似,但是具有不同的存储方式(请参见下文)。为了更好的理解,我们来看一个例子:
CREATE TABLE example (
id INT(11) NOT NULL AUTO_INCREMENT,
mydate DATE,
mytime TIME,
mydatetime DATETIME,
mytimestamp TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上面的例子中,我们创建了一个名为“example”的表,在该表中,我们定义了4个不同的列,分别用于存储日期、时间、日期和时间以及时间戳信息。
存储日期和时间值的方式与其他数据类型相似。我们可以使用INSERT语句插入日期和时间值:
INSERT INTO example (mydate, mytime, mydatetime, mytimestamp) VALUES
('2021-01-01', '12:30:45', '2021-01-01 12:30:45', NOW());
在上面的例子中,我们为mydate
、mytime
、mydatetime
和mytimestamp
列插入了不同的值。其中,NOW()
函数用于获取当前日期和时间值。
要显示日期和时间值,我们可以使用SELECT
语句:
SELECT * FROM example;
该语句将显示所有行和列的值。在结果中,日期和时间值将以MySQL日期和时间格式显示。
MySQL支持许多日期和时间操作。下面是一些常用的操作:
DATE_FORMAT(date, format)
: 格式化日期值。DATEDIFF(date1, date2)
: 计算两个日期之间的天数差异。ADDDATE(date, INTERVAL value unit)
: 将时间间隔添加到日期值。SUBDATE(date, INTERVAL value unit)
: 从日期值中减去时间间隔。DATE_ADD(date, INTERVAL expr unit)
: 将表达式中的时间间隔添加到日期值。DATE_SUB(date, INTERVAL expr unit)
: 将表达式中的时间间隔从日期值中减去。下面是一个使用这些操作的例子:
SELECT
mydate,
DATE_FORMAT(mydate, '%Y-%m-%d') AS formatted_date,
DATEDIFF(NOW(), mydate) AS days_since,
ADDDATE(mydate, INTERVAL 1 DAY) AS tomorrow,
SUBDATE(mydate, INTERVAL 1 YEAR) AS last_year,
DATE_ADD(mydate, INTERVAL 1 MONTH) AS next_month,
DATE_SUB(mydate, INTERVAL 2 WEEK) AS two_weeks_ago
FROM example
在上面的例子中,我们使用DATE_FORMAT
函数将日期值格式化为字符串,并使用DATEDIFF
函数计算自日期以来的天数。我们还演示了如何使用ADDDATE
,SUBDATE
,DATE_ADD
和DATE_SUB
函数来操作日期值。
TIMESTAMP
类型与DATETIME
类型类似,但具有不同的存储方式。TIMESTAMP
类型在内部以UTC格式存储,但在查询结果中使用当前时区显示。此外,TIMESTAMP
类型占用的存储空间更少(4字节),因此在某些情况下可以节省空间。
请注意,如果更改服务器时区,则必须将现有的TIMESTAMP
值转换为新时区。否则,查询结果中的时间值将是错误的。转换方法如下:
SELECT CONVERT_TZ(mytimestamp, 'UTC', 'Asia/Shanghai') AS local_timestamp FROM example;
在上面的例子中,我们使用CONVERT_TZ
函数将mytimestamp
列中存储的UTC时间戳转换为东八区本地时间。
MySQL中的日期和时间类型对于许多应用程序都是至关重要的。了解如何存储、显示和操作日期和时间值可以帮助您更好地管理数据。