================= trunc 的用法======================

本文介绍了使用SQL的TRUNC函数来获取日期、时间的特定部分(如年、月、日等),并展示了如何通过该函数处理数值以得到整数部分。通过几个具体的SQL查询实例,演示了TRUNC函数的基本用法。
截取  

    
  对数字,日期进行的  
  你做个测试好不好?  
  或者找点东西看看  
   
  SQL>   select   trunc(sysdate)   from   dual;   ===返回 最近的日期
   
  TRUNC(SYSD  
  ----------  
  07-1月   -03  
   
  SQL>   select   trunc(sysdate,'mm')   from   dual;  
 =========  返回 最近的月份
   

  TRUNC(SYSD  
  ----------  
  01-1月   -03  
   
  SQL>   select   trunc(sysdate,'yy')   from   dual;  

  =========== 返回最近的 年 。。。
   
  TRUNC(SYSD  
  ----------  
  01-1月   -03  
   
  SQL>   select   trunc(234.5565)   from   dual;     ===返回 整数
   
  TRUNC(234.5565)  
  ---------------  
                          234  
   
  SQL>   select   trunc(sysdate,'D')   from   dual;  

   ===== 返回 ,
   
  TRUNC(SYSD  
  ----------  
  05-1月   -03  
   
  SQL>    
  ================================================
select   trunc(sysdate,'mm')+1   from   dual;  
   
  TRUNC(SYSDATE,'MM')+1  
  ---------------------  
  2003-1-2  
   
  日期+数字(以日为单位),请记住
### 使用 `EXTRACT()` 函数替代 `TRUNC(SYSDATE) - 1` 获取日期信息的可行性 在 Oracle 数据库中,`EXTRACT()` 函数用于从日期或时间类型中提取特定的部分,如年、月、日等。然而,它不能直接替代 `TRUNC(SYSDATE) - 1` 来获取前一天的完整日期信息,因为 `EXTRACT()` 仅返回特定字段的值(如整数),而 `TRUNC(SYSDATE) - 1` 返回的是一个完整的日期类型值[^1]。 #### 1. `EXTRACT()` 的基本用法 `EXTRACT()` 函数可以提取日期中的年、月、日等部分,例如: ```sql SELECT EXTRACT(DAY FROM SYSDATE) AS day, EXTRACT(MONTH FROM SYSDATE) AS month, EXTRACT(YEAR FROM SYSDATE) AS year FROM dual; ``` 上述查询将分别提取当前日期的日、月和年。虽然可以单独获取日期的某个部分,但无法直接通过 `EXTRACT()` 获取前一天的完整日期信息[^2]。 #### 2. `TRUNC(SYSDATE)` 与 `EXTRACT()` 的区别 `TRUNC(SYSDATE)` 会返回当前日期的午夜时间(即去掉时间部分,仅保留日期部分),而 `TRUNC(SYSDATE, 'MM')` 可以返回当月的第一天。相比之下,`EXTRACT()` 仅能提取日期的某个字段,无法用于直接计算日期差值或获取前一天的日期[^1]。 例如,`TRUNC(SYSDATE) - 1` 返回的是前一天的午夜时间,而 `EXTRACT(DAY FROM SYSDATE) - 1` 仅返回当前日期的日部分减 1,无法表示完整的日期信息。 #### 3. 替代方案 如果需要获取前一天的年、月、日等字段,可以通过 `TRUNC(SYSDATE) - 1` 结合 `EXTRACT()` 提取特定字段: ```sql SELECT EXTRACT(DAY FROM TRUNC(SYSDATE) - 1) AS prev_day, EXTRACT(MONTH FROM TRUNC(SYSDATE) - 1) AS prev_month, EXTRACT(YEAR FROM TRUNC(SYSDATE) - 1) AS prev_year FROM dual; ``` 此查询结合了 `TRUNC(SYSDATE) - 1` 的日期计算和 `EXTRACT()` 的字段提取功能,可以获取前一天的日、月、年信息。 #### 4. 使用 `EXTRACT()` 进行条件筛选 如果目标是根据年、月、日字段进行筛选,可以使用 `EXTRACT()` 函数进行条件匹配。例如,筛选出与前一天相同年月日的记录: ```sql SELECT * FROM your_table WHERE EXTRACT(DAY FROM date_column) = EXTRACT(DAY FROM TRUNC(SYSDATE) - 1) AND EXTRACT(MONTH FROM date_column) = EXTRACT(MONTH FROM TRUNC(SYSDATE) - 1) AND EXTRACT(YEAR FROM date_column) = EXTRACT(YEAR FROM TRUNC(SYSDATE) - 1); ``` 此查询通过 `EXTRACT()` 提取字段并与前一天的对应字段进行匹配,从而实现条件筛选。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值