首页 > 数据库 >《数据库基础语法》6. 日期和时间的存储与格式转换

《数据库基础语法》6. 日期和时间的存储与格式转换

时间:2023-03-07 23:22:57浏览次数:50  
标签:CURRENT -- TIMESTAMP 数据库 语法 日期 格式 EXTRACT SELECT

楔子

上次我们介绍了 SQL 中常见的字符函数,学习了如何对文本数据进行连接、大小写转换、子串的查找和替换等处理。下面我们继续讨论常见的日期和时间函数,以及不同数据类型之间的转换函数。

日期和时间的存储

在数据库中,日期时间类型存在 3 种形式:

  • DATE,日期类型,包含年、月、日。可以用于存储出生日期、入职日期等。
  • TIME,时间类型,包含时、分、秒,以及小数秒。一般使用较少。
  • TIMESTAMP,时间戳类型,包含年、月、日、时、分、秒,以及小数秒。用于对时间精度要求比较高的场景,比如存储订单时间。

TIMESTAMP 和 TIME 还可以添加 WITH TIME ZONE 选项,用于指定一个时区偏移量。例如,UTC 标准时间的 0 点等于北京时间的早上 8 点。时区选项通常用于支持全球化的应用系统中。

以下是 4 种数据库对于日期时间类型的支持情况。

其中,Oracle 的 DATE 类型包含了日期和时间两部分,但不支持 TIME 类型。MySQL 还提供了 DATETIME 日期时间类型。

日期时间函数

日期时间函数用于操作日期和时间数据,例如获取当前日期、为指定日期增加天数,计算两个日期之间的差或者获取日期的部分信息。下表列出了 SQL 中常见的日期时间函数:

字符函数用于字符数据的处理,例如字符串的拼接、大小写转换、子串的查找和替换等。下表列出了 SQL 中常见的字符函数:

我们演示一下这几个函数的用法:

-- 当前日期
SELECT CURRENT_DATE;

-- 当前时间
SELECT CURRENT_TIME;

-- 当前日期加上时间,除了current_timestamp,还可以通过now()来获取
SELECT CURRENT_TIMESTAMP;

-- 截取当然日期的指定部分
SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP), -- 获取年
       EXTRACT(MONTH FROM CURRENT_TIMESTAMP), -- 获取月
       EXTRACT(DAY FROM CURRENT_TIMESTAMP);  -- 获取天

SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP),  -- 获取小时
       EXTRACT(MINUTE FROM CURRENT_TIMESTAMP),  -- 获取分钟
       EXTRACT(SECOND FROM CURRENT_TIMESTAMP);  -- 获取秒

类型转换函数

CAST(expr AS type) 函数用于将数据转换为不同的类型,以下是一个类型转换的示例:

SELECT CAST('123' AS INT) + 234; -- 357
SELECT '123'::INT + 234; -- 357
-- 对于PostgreSQL来说,以上是等价的

所以我们可以很好的处理日期,举个栗子:

-- 将字符串转成日期, 当然还可以转成 INTERVAL
SELECT '2018-1-1'::DATE + '7 day'::INTERVAL;  -- 2018-01-08 00:00:00.000000

-- 再比如我有日期类型的数据 A 和 B, 我要在 B 的月份加在 A 上面
SELECT '2018-1-1'::DATE + (EXTRACT(MONTH FROM '2018-2-2'::DATE) || 'month')::INTERVAL; -- 2018-03-01 00:00:00.000000
-- 解释一下,首先 "n YEAR"::INTERVAL 就表示时间间隔n年, 同理 "n MONTH"::INTERVAL 表示时间间隔n月
-- 当然还有 DAY、HOUR 什么的
-- EXTRACT(MONTH FROM '2018-2-2'::DATE)表示解析出来月份, 然后和 MONTH 进行拼接, 最后转成 INTERVAL 类型, 再相加

-- 另外,我这个是PostgreSQL语法,支持通过::来进行类型转化,但是其它数据库则不一定支持, 因此注意自己所使用的数据库

小结

这一节我们介绍了日期和时间数据类型以及相关的函数,同时了解了数据类型之间的显式转换和隐式转换。到此为止,我们已经学习了 SQL 中各种常见的标量函数。

标签:CURRENT,--,TIMESTAMP,数据库,语法,日期,格式,EXTRACT,SELECT
From: https://www.cnblogs.com/ministep/p/17190147.html

相关文章

  • 《数据库基础语法》5. 什么是函数?如何利用函数提高效率
    楔子SQL语句主要的功能就是对数据进行处理和分析。为了避免重复造轮子,提高数据处理的效率,SQL为我们提供了许多标准的功能模块:函数(Function)。SQL函数是一种具有某种功......
  • 连上mysql数据库了,先小发表一下
    首先我的mysql是8.0版本的,用的8版本的驱动包就连接失败找不到类,后来换成5版本的就好了。一开始我按照网上的教程,告诉我需要在子线程才能执行jdbc的连接,代码如下所示:r......
  • 关系型数据库特点
    1)数据集中控制。在文件管理方法中,文件是分散的,每个用户或每种处理都有各自的文件,这些文件之间一般是没有联系的,因此,不能按照统一的方法来控制、维护和管理。而数据库则很好......
  • mysql修改存储引擎,mysql修改表字符集,mysql修改列字符集,mysql修改排序规则,mysql修改行
    【1】修改存储引ALTERTABLE`qipa250_articles`ENGINE=INNODB;ALTERTABLE`qipa250_articles_text`ENGINE=INNODB;ALTERTABLE`qipa250_authors`ENGINE=INNODB;......
  • 缓存数据库redis 及各种value数据类型的使用
    Redis介绍与安装redis:缓存数据库(大部分时间做缓存,不仅仅可以做缓存),非关系型数据库【区别与mysql关系型数据库】nosql:非关系型数据库c语言写的服务(监听端口)......
  • ExcelPatternTool: Excel表格-数据库互导工具
    ExcelPatternToolExcel表格-数据库互导工具介绍:指定Pattern文件-一个规则描述的json文档,基于此规则实现Excel表格与数据库之间的导入导出,校验等功能。特点:小巧,轻量......
  • redis缓存数据库
    redis缓存数据库redis介绍与安装缓存数据库,非关系型数据库(nosql),由c语言写的服务端用于在内存中存取数据(读取速度快)速度快的原因有纯内存操作网络模型使用的IO多......
  • 从 JS 日期对象获取 YYYYMMDD 格式的字符串?
    我正在尝试使用JS将a转换dateobject为格式的字符串YYYYMMDD。有没有比连接Date.getYear(),Date.getMonth()和更简单的方法Date.getDay()?解答http://www.st......
  • F-Droid 更新索引格式,数据量降低 100 倍
    F-Droid更新索引格式,数据量降低100倍来源:OSCHINA编辑: Alias_Travis2023-03-0709:02:45 0Android足够开放的特性诞生了很多可以替代GooglePlay......
  • markdown语法
    markdown语法记录标题#一级标题##二级标题###三级标题(记得打空格)一级标题二级标题三级标题加粗&斜体&删除线**jiacu***xieti*~~shanchu~~jiacuxi......