📌  相关文章
📜  计算SQL中两个特定日期之间的月数

📅  最后修改于: 2022-05-13 01:54:27.007000             🧑  作者: Mango

计算SQL中两个特定日期之间的月数

在本文中,我们将讨论用于计算两个特定日期之间的月数的 SQL 查询的概述,并将在示例的帮助下实现以更好地理解。让我们一步一步地讨论它。

概述 :
在这里,我们将看到,如何使用 DATEDIFF()函数在 SQL 查询的帮助下计算两个给定日期之间的月数。出于演示的目的,我们将在名为“geeks”的数据库中创建一个 demo_orders 表执行 SQL 查询以计算两个特定日期之间的月数的步骤如下。

步骤 1:创建数据库:
使用以下 SQL 语句创建名为 geeks 的数据库,如下所示。

CREATE DATABASE geeks;

步骤 2:使用数据库:
使用下面的 SQL 语句将数据库上下文切换到 geeks,如下所示。

USE geeks;

步骤 3:表定义:
我们的极客数据库中有以下演示表。



CREATE TABLE demo_orders 
(
ORDER_ID INT IDENTITY(1,1) PRIMARY KEY, 
--IDENTITY(1,1) is same as AUTO_INCREMENT in MySQL.
--Starts from 1 and increases by 1 with each inserted row.
ITEM_NAME VARCHAR(30) NOT NULL,
ORDER_DATE DATE
);

第 4 步:验证:
您可以使用以下语句查询已创建表的描述:

EXEC SP_COLUMNS demo_orders;

输出 :

TABLE_NAMECOLUMN_NAMEDATA_TYPETYPE_NAMEPRECISIONLENGTHREMARKS
demo_ordersORDER_ID4int identity104NULL
demo_ordersITEM_NAME12varchar3030NULL
demo_ordersORDER_DATE-9date1020NULL

步骤 5:向表中添加数据:
使用以下语句将数据添加到 demo_orders 表中,如下所示。

INSERT INTO demo_orders 
--no need to mention columns explicitly as we are inserting into all columns and ID gets
--automatically incremented.
VALUES
('Maserati', '2007-10-03'),
('BMW', '2010-07-23'),
('Mercedes Benz', '2012-11-12'),
('Ferrari', '2016-05-09'),
('Lamborghini', '2020-10-20');

第 6 步:验证:
要验证表的内容,请使用以下语句,如下所示。

SELECT * FROM demo_orders;

输出 :

ORDER_IDITEM_NAMEORDER_DATE
1Maserati2007-10-03T00:00:00.000Z
2BMW2010-07-23T00:00::00.00Z
3Mercedes Benz2012-11-12T00:00::00.00Z
4Ferrari2016-05-09T00:00::00.00Z
5Lamborghini2020-10-20T00:00::00.00Z

步骤 7:计算两个特定日期之间的月数的 SQL 查询:
现在让我们使用 DATEDIFF()函数找出表格中“玛莎拉蒂”和“法拉利”订单日期之间的月数。下面是 DATEDIFF()函数的语法。

DATEDIFF(day/month/year, , );

例子 -

DECLARE 
@start VARCHAR(10) = (
  SELECT order_date FROM demo_orders
  WHERE item_name = 'Maserati'),
@end VARCHAR(10) = (
  SELECT order_date FROM demo_orders
  WHERE item_name = 'Ferrari')
  

--@start variable holds the start date(i.e date of Maserati being purchased).

--@end variable holds the end date (i.e date of Ferrari being purchased).

SELECT DATEDIFF(month, @start, @end) AS number_of_months;

--In place of month we could use year or day and that would give the respective no. of years and 
--days in between those dates.

输出 :