SQL新手求助:使用TRUNC函数截断creat_DTTM列的时间部分
嘿,作为SQL新手碰到日期时间截断的问题太正常了!我来给你梳理下不同数据库里怎么搞定creat_DTTM只留日期的需求,这样你就能轻松基于日期做查询啦~
处理creat_DTTM列,仅保留日期部分
不同的SQL数据库有各自的函数来实现截断时间、提取日期的效果,下面是几种最常用场景的解决方案:
MySQL/MariaDB
直接用DATE()函数就能提取日期部分,简单粗暴:
-- 查询时只返回日期 SELECT DATE(creat_DTTM) AS creat_date FROM your_table_name; -- 基于日期筛选记录(比如找2024-05-20的所有数据) SELECT * FROM your_table_name WHERE DATE(creat_DTTM) = '2024-05-20';
PostgreSQL
有两种常用方式,要么直接把字段转成DATE类型,要么用DATE_TRUNC()截断到天:
-- 方法1:直接转换为DATE类型 SELECT creat_DTTM::DATE AS creat_date FROM your_table_name; -- 方法2:用DATE_TRUNC精准截断到日期 SELECT DATE_TRUNC('day', creat_DTTM)::DATE AS creat_date FROM your_table_name; -- 筛选特定日期的记录 SELECT * FROM your_table_name WHERE creat_DTTM::DATE = '2024-05-20';
SQL Server
用CAST()或者CONVERT()都能把datetime类型转成DATE:
-- 用CAST转换 SELECT CAST(creat_DTTM AS DATE) AS creat_date FROM your_table_name; -- 或者用CONVERT(可以指定格式,但转DATE不需要) SELECT CONVERT(DATE, creat_DTTM) AS creat_date FROM your_table_name; -- 查询特定日期的数据 SELECT * FROM your_table_name WHERE CAST(creat_DTTM AS DATE) = '2024-05-20';
Oracle
用TRUNC()函数,指定'DD'参数就能截断到日期:
-- 提取日期部分 SELECT TRUNC(creat_DTTM, 'DD') AS creat_date FROM your_table_name; -- 筛选特定日期的记录(注意要把字符串转成日期类型) SELECT * FROM your_table_name WHERE TRUNC(creat_DTTM, 'DD') = TO_DATE('2024-05-20', 'YYYY-MM-DD');
小提示:如果以后经常要基于这个日期做查询,建议给转换后的表达式创建函数索引,能大幅提升查询速度哦!比如在MySQL里可以这么建:
CREATE INDEX idx_creat_date ON your_table_name (DATE(creat_DTTM));
内容的提问来源于stack exchange,提问作者cardonas
相关产品推荐
相关产品推荐

