迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

MySQL 中的 Datepart 函数替代方案

作者:迹忆客 最近更新:2024/03/25 浏览次数:

SQL datepart 函数提取日期时间数据类型的一部分,用于过滤或聚合 SQL 数据库中的表字段。但是,它在 MySQL 中并不直接可用。


MySQL 中的 Datepart 函数替代方案

有两种方法可以实现与 MySQL 中的 datepart 类似的结果。

  1. 使用 Extract(datetime-part FROM datetime) 方法。
  2. 使用 datetime-part(datetime) 方法。

回想一下,datetime 数据类型是 MySQL 中可用的典型日期和时间数据类型的组合/串联。日期和时间通常具有各自的格式:YYYY-MM-DDHH:MM:SS.XXXXXX

因此,日期时间数据类型具有 YYYY-MM-DD HH:MM:SS.XXXXXX 格式,其中 .XXXXXX 表示 MySQL 中可用的 6 位小数秒精度 (fps)。

现在,让我们创建一个简单的 registration_system 数据库来实现两种日期时间提取方法。

-- Initializing
CREATE DATABASE registration_system;
USE registration_system;

-- CREATING TABLES
CREATE TABLE registered_users (
	id INT AUTO_INCREMENT UNIQUE,
    username VARCHAR (255) NOT NULL,
    email VARCHAR(255),
    registered_on DATETIME(6),	-- YYYY-MM-DD HH:MM:SS.XXXXXX
    PRIMARY KEY(id)
);

输出:

1 row(s) affected
-----------------------------------------------------------------------------------------
0 row(s) affected
-----------------------------------------------------------------------------------------
0 row(s) affected

我们可以通过在创建的表中插入值来模拟一组注册用户。

-- POPULATING THE TABLE WITH SAMPLE REGISTRATION DATA: 3 users
INSERT INTO registered_users(username, email, registered_on) Values
	('Clint Rotterdam', 'clint_rotterdam@trialmail.com','2022-01-03 09:25:23.230872'),
    ('David Maxim', 'maxim_david@testmail.com','2022-01-05 10:30:24.046721'),
	('Vin Petrol', 'vin_not_diesel@crudemail.com','2022-01-30 14:05:03.332891');

输出:

3 row(s) affected Records: 3  Duplicates: 0  Warnings: 0

这是创建的用户表的视图。

SELECT * FROM registered_users;    -- Checking the table

输出:

id	username			email								registered_on
1	Clint Rotterdam		clint_rotterdam@trialmail.com		2022-01-03 09:25:23.230872
2	David Maxim			maxim_david@testmail.com			2022-01-05 10:30:24.046721
3	Vin Petrol			vin_not_diesel@crudemail.com		2022-01-30 14:05:03.332891
-----------------------------------------------------------------------------------------
3 row(s) returned

使用 MySQL 中的 Extract(datetime-part FROM datetime) 方法提取日期时间的一部分

此方法与无处不在的 SELECT 语句相结合。

datetime-part 参数可以是以下任何日期时间部分:MONTHMICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTER, YEAR, SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH

以下是这些选项的官方文档以供额外参考。

让我们举个例子。我们将从数据库中获取 1 月 30 日之前注册的用户的详细信息。

SELECT id AS 'USER_ID', username AS 'NAME', EXTRACT(DAY FROM registered_on) AS 'Day Registered'
FROM registered_users
WHERE EXTRACT(DAY FROM registered_on) < 30;

输出:

USER_ID		NAME				Day Registered
1			Clint Rotterdam		3
2			David Maxim			5
-----------------------------------------------------------------------------------------
2 row(s) returned

此输出通知两件事。Extract 功能更改了输出视图并过滤了结果。

然后,许多应用程序都可以通过编写操作日期时间的非常高级的查询来使用。有关此功能的额外参考,请查看官方文档。


使用 MySQL 中的 datetime-part(datetime) 方法提取日期时间的一部分

此方法与前者类似,但参数较少。此外,结合 SELECT 语句,此方法可以根据所需的日期时间部分过滤列。

同样,让我们​​获取 1 月 30 日之前注册的用户。

SELECT id AS 'USER_ID', username AS 'NAME', DAY(registered_on) AS 'Day Registered'
FROM registered_users
WHERE DAY(registered_on) < 30;

输出:

USER_ID		NAME				Day Registered
1			Clint Rotterdam		3
2			David Maxim			5
-----------------------------------------------------------------------------------------
2 row(s) returned

通过使用 Date 过滤器,可以进一步改进此结果,如下例所示。

SELECT id AS 'USER_ID', username AS 'NAME', DATE(registered_on) AS 'Date Registered' FROM registered_users
WHERE DAY(registered_on) < 30;

输出:

USER_ID		NAME				Date Registered
1			Clint Rotterdam		2022-01-03
2			David Maxim			2022-01-05
-----------------------------------------------------------------------------------------
2 row(s) returned

任何一种方法都提供相同的结果。但是,Extract 方法可以更清楚地说明执行的操作。

这种方法是代码可读性和调试的首选。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

MySQL 函数

发布时间:2024/03/25 浏览次数:74 分类:MySQL

本文介绍如何在 MySQL 中使用和创建一个简单的函数。

MySQL with 子句

发布时间:2024/03/25 浏览次数:79 分类:MySQL

本教程教你 MySQL with 子句。它还指导你在何处以及如何使用 MySQL With 子句

MySQL Tinytext

发布时间:2024/03/25 浏览次数:109 分类:MySQL

本文介绍了如何在 MySQL 中使用不同的数据类型。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便