SQL 日期和时间
通常,时间使用三个值表示:小时、分钟和秒。我们可以以不同的格式存储时间。
- HH:MM:SS (小时:分钟:秒)
-
它以12小时制(AM/PM)存储和显示时间,例如:10:00 AM/10:00 PM。
-
它(时间)也可以以24小时制存储和显示时间;24小时制从00:00(午夜)到23:59运行。
日期也使用三个值表示:日期、月份和年份。日期有很多可能的变体,全部取决于几个不一致的因素。
- DD/MM/YYYY格式,例如 – 06/02/2023
- MM/DD/YYYY格式,例如 – 02/06/2023
- DD-MM-YYYY格式,例如 – 02-06-2023
SQL中的日期和时间
SQL中的日期和时间函数用于有效处理日期和时间数据。在使用数据库时,应该匹配日期和时间函数的格式,以便将数据插入表中。
SQL Server中提供了几个不同的日期和时间函数。包括它们的目的是确保日期和时间模块在创建和使用数据库时可用。
日期和时间数据类型
日期和时间数据类型用于存储同时包含日期和时间的值。下表列出了不同的日期和时间数据类型。
序号 | 数据类型及描述 | 存储 |
---|---|---|
1 | datetime 它存储从1753年1月1日到9999年12月31日的日期和时间,精度为3.33毫秒。 | 8字节 |
2 | datetime2 它存储从0001年1月1日到9999年12月31日的日期和时间,精度为100纳秒。 | 6 – 8字节 |
3 | smalldatetime 它存储从1900年1月1日到2079年6月6日的日期和时间,精度为1分钟。 | 4字节 |
4 | date 它只存储日期,从0001年1月1日到9999年12月31日 | 3字节 |
5 | time 它只存储时间,精度为100纳秒。 | 3 – 5字节 |
6 | datetimeoffset 它与datetime2相同,但添加了时区偏移。 | 8 – 10字节 |
7 | timestamp 它存储每次创建或修改行时更新的唯一编号。它不对应实际时间,而是基于内部时间。每个表只能有一个timestamp变量。 |
SQL中的日期和时间格式
SQL服务器默认以特定格式存储日期、smalldatetime、timestamp和年份值。以下是SQL服务器中使用的日期和时间格式:
- DATE – YYYY-MM-DD
- DATETIME – YYYY-MM-DD HH:MI:SS
- SMALLDATETIME – YYYY-MM-DD HH:MI:SS
- TIMESTAMP – 一个唯一的数字
向表中插入日期和时间值
要向表中插入日期和时间值,请按照以下步骤进行:
- 首先,您必须创建一个接受日期和时间值的表。
- 其次,您必须将数据插入到接受日期和时间数据类型的新创建的表中。
示例
在下面的示例中,我们尝试使用以下查询创建一个仅接受日期和时间数据类型的表。
CREATE TABLE customers_details(orderDate DATE, shippingDate DATETIME, deliveredDate TIMESTAMP, time TIME);
验证
在创建完表格之后,我们可以使用这个查询来检查它的细节:”EXEC sp_help ‘dbo.customers_details'” 在SQL中。
+----------------+-----------+----------+--------+------+-------+----------+
| Column_name | Type | Computed | Length | Prec | Scale | Nullable |
+----------------+-----------+----------+--------+------+-------+----------+
| orderDate | date | no | 3 | 10 | 0 | Yes |
| shippingDate | datetime | no | 8 | | | Yes |
| deliveredDate | timestamp | no | 8 | | | No |
| time | time | no | 5 | 16 | 7 | Yes |
+----------------+-----------+----------+--------+------+-------+----------+
将表中所有与日期和时间相关的列的值传递,我们可以使用以下查询-
INSERT INTO customers_details VALUES('2023-02-01', '2023-02-01 :10:00','2023-02-03 :18:00', '18:00');
日期和时间的操作
在这个事件中,我们正在执行函数并显示其结果,其中包含日期和时间。
GETDATE()函数
GETDATE()函数返回datetime数据类型,并通常用于获取当前日期,如下面的SQL查询中所示。GETDATE()函数返回当前日期和时间。
SELECT GETDATE() AS 'current datetime';
验证
当我们执行上述的SQL查询时,我们得到如下的当前日期和时间。
+-------------------------+
| current datetime |
+-------------------------+
| 2023-02-06 14:10:49.860 |
+-------------------------+
当前时间戳
current_timestamp用于获取当前时间戳,并返回与GETDATE()函数相同的日期和时间。它的数据类型也是日期和时间。如下所示的SQL查询中,CURRENT_TIMESTAMP通常返回当前时间以及当前日期 –
SELECT CURRENT_TIMESTAMP AS 'CURRENTTIMESTAMP';
输出
执行以上SQL查询时,我们得到的当前日期和时间如下:
+-------------------------+
| CURRENTTIMESTAMP |
+-------------------------+
| 2023-02-06 14:31:53.520 |
+-------------------------+
SYSDATETIME() 函数
SYSDATETIME() 函数也用于获取 SQL 服务器实例所在系统的当前时间。与 GETDATE() 函数相比,它具有更高的小数秒精度。以下是 SYSDATETIME() 函数的 SQL 查询语句。
SELECT SYSDATETIME() AS 'Current Time and Date';
输出
当我们运行上面的SQL查询时,我们得到以下输出结果:
+-----------------------------+
| Current Time and Date |
+-----------------------------+
| 2023-02-06 14:57:28.5419381 |
+-----------------------------+
CONVERT() 函数
我们使用 CONVERT 函数来提取时间,其中使用了 GETDATE() 或 CURRENT_TIMESTAMP 函数来从当前日期中分离出时间部分(来自于 SYSDATE),正如我们可以在下面的 SQL 查询中看到的那样。
SELECT CONVERT(VARCHAR(8), GETDATE(), 108) AS 'HH:MM:SS';
验证
当我们运行上述的SQL查询时,我们只能得到以“HH:MM:SS”显示的时间,因为我们使用的是108。108是一个只显示时间的格式,以“HH:MM:SS”格式显示时间。
+----------+
| HH:MM:SS |
+----------+
| 15:23:19 |
+----------+