MySQL - PERIOD_DIFF() 函数
MySQL PERIOD_DIFF() 函数与 PERIOD_ADD() 函数类似。它用于计算两个周期值之间的差值。在 MySQL 中,周期定义为年份和月份的组合;并将以 YYMM 或 YYYYMM 格式表示。
此函数接受两个周期值作为参数值,计算它们之间的差值并返回结果(以月份数的形式)。
如果传递给函数的任一参数为 NULL,则返回 NULL 值。
语法
以下是 MySQL PERIOD_DIFF() 函数的语法 -
PERIOD_DIFF(P1,P2)
参数
此方法接受两个参数。具体描述如下 -
P1 是周期值。格式为"YYMM"或"YYYYMM"
P2 是我们要减去的另一个周期值。
返回值
此函数返回周期 P1 和 P2 之间的月份差值。
示例
在以下示例中,我们使用 PERIOD_DIFF() 函数计算两个给定周期值之间的差值 -
SELECT PERIOD_DIFF(202409, 202309) As Result;
输出
这将产生以下结果 -
Result |
---|
12 |
示例
以下是此函数的另一个示例 -
SELECT PERIOD_DIFF('2405', '2305') As Result;
输出
以下是输出 -
Result |
---|
12 |
示例
在此示例中,我们使用以下 CREATE TABLE 查询创建了一个名为 PLAYERS 的表
CREATE TABLE PLAYERS( ID int, NAME varchar(255), DATE_OF_BIRTH date, DOB_PERIOD varchar(30), Country varchar(255), PRIMARY KEY (ID) );
现在,使用 INSERT 语句将以下记录插入到 ORDERS 表中 -
INSERT INTO PLAYERS VALUES (1, 'Shikhar Dhawan', DATE('1981-12-05'), 198112, 'India'), (2, 'Jonathan Trott', DATE('1981-04-22'), 198104, 'SouthAfrica'), (3, 'Kumara Sangakkara', DATE('1977-10-27'), 197710, 'Srilanka'), (4, 'Virat Kohli', DATE('1988-11-05'), 198811, 'India'), (5, 'Rohit Sharma', DATE('1987-04-30'), 198704, 'India'), (6, 'Ravindra Jadeja', DATE('1988-12-06'), 198812, 'India'), (7, 'James Anderson', DATE('1982-06-30'), 198206, 'England');
执行以下查询以获取上述创建的表中的所有插入记录 -
Select * From PLAYERS;
以下是 PLAYERS 表 -
ID | NAME | DATE_OF_BIRTH | DOB_PERIOD | COUNTRY |
---|---|---|---|---|
1 | Shikhar Dhawan | 1981-12-05 | 198112 | India |
2 | Jonathan Trott | 1981-04-22 | 198104 | SouthAfrica |
3 | Kumara Sangakkara | 1977-10-27 | 197710 | Srilanka |
4 | Virat Kohli | 1988-11-05 | 198811 | India |
5 | Rohit Sharma | 1987-04-30 | 198704 | India |
6 | Ravindra Jadeja | 1988-12-06 | 198812 | India |
7 | James Anderson | 1982-06-30 | 198206 | England |
这里,我们使用 MySQL PERIOD_DIFF() 函数来计算"DOB_PERIOD"与固定周期"197012"之间的周期差值 -
SELECT ID, NAME, DATE_OF_BIRTH, DOB_PERIOD, PERIOD_DIFF(DOB_PERIOD, 197012) As Result From PLAYERS;
输出
输出结果如下 -
ID | NAME | DATE_OF_BIRTH | DOB_PERIOD | Result |
---|---|---|---|---|
1 | Shikhar Dhawan | 1981-12-05 | 198112 | 132 |
2 | Jonathan Trott | 1981-04-22 | 198104 | 124 |
3 | Kumara Sangakkara | 1977-10-27 | 197710 | 82 |
4 | Virat Kohli | 1988-11-05 | 198811 | 215 |
5 | Rohit Sharma | 1987-04-30 | 198704 | 196 |
6 | Ravindra Jadeja | 1988-12-06 | 198812 | 216 |
7 | James Anderson | 1982-06-30 | 198206 | 138 |