Oracle 数字区间、日期边界问题分类总结(日期比较大小)

news2026/5/8 22:24:30
Oracle中不同函数对数字区间的处理方式不同FOR循环闭区间[m,n]包含结束值如1..3包含3SUBSTR从起始位置开始截取指定长度字符非结束位置特殊规则0视为第1位负数表示从末尾倒数INSTR返回子串出现的位置从1计数其他函数ROUND/TRUNC处理小数位MOD取余数POWER计算幂次关键区别FOR循环关注起止值包含性SUBSTR关注起始位置和长度INSTR返回位置索引日期处理BETWEEN对日期包含结束日00:00:00不包含时间部分推荐使用开始 AND 结束日1的方式确保包含完整时间段TRUNC函数去除时间部分LAST_DAY获取月末时间段查询应使用不等号确保边界完整关键区别数字区间关注起止值包含性日期处理需特别注意时间部分的边界问题。 Oracle 数字区间问题分类总结功能/函数语法起始位置是否包含结束位置边界规则说明示例结果FOR 循环FOR i IN m..n LOOP从 m 开始✅包含 n闭区间[m, n]i 会取到 nFOR i IN 1..3 LOOPi 1,2,3SUBSTR 截取SUBSTR(str, m, n)从第 m 位开始✅包含截取n 个字符不是到第 n 位SUBSTR(ABCDE, 2, 3)BCD位置2,3,4SUBSTR 简写SUBSTR(str, m)从第 m 位开始✅包含截取到字符串末尾SUBSTR(ABCDE, 3)CDEINSTR 查找INSTR(str, sub, m, n)从第 m 位开始搜索N/A返回值是位置返回第 n 次出现的位置从1计数INSTR(ABABA, B, 1, 2)4第2个B的位置ROUND 四舍五入ROUND(num, m)第 m 位小数N/A不是区间问题m 为正小数点后m 为负小数点前ROUND(123.456, 1)123.5TRUNC 截断TRUNC(num, m)第 m 位小数N/A不是区间问题直接截断不四舍五入TRUNC(123.456, 1)123.4MOD 取模MOD(m, n)N/AN/A返回 m 除以 n 的余数MOD(10, 3)1POWER 幂运算POWER(m, n)N/AN/A返回 m 的 n 次方POWER(2, 3)8 容易混淆的重点对比1️⃣ FOR 循环 vs SUBSTR 的结束概念对比项FOR 循环SUBSTR区间类型位置区间[m, n]长度区间从 m 开始取 n 个参数含义结束值截取长度是否包含包含结束值包含起始位置取 n 个字符sql-- FOR 循环包含 5 FOR i IN 1..5 LOOP -- i 1,2,3,4,5 -- SUBSTR第2个参数是长度不是结束位置 SUBSTR(ABCDE, 2, 3) -- 从位置2开始取3个 → BCD位置2,3,42️⃣ SUBSTR 的起始位置规则特殊起始位置行为示例字符串ABCDE结果0视为第 1 位SUBSTR(ABCDE, 0, 2)AB1正常从第 1 位开始SUBSTR(ABCDE, 1, 2)AB正数 n从第 n 位开始SUBSTR(ABCDE, 3, 2)CD负数 n从末尾倒数第 n 位开始SUBSTR(ABCDE, -2, 2)DE3️⃣ INSTR 的位置返回值sql-- INSTR 返回的是位置编号从1开始 INSTR(ABCDE, C) -- 返回 3 INSTR(ABABA, B, 1, 2) -- 从位置1开始找第2个B → 返回 4✅ 快速记忆口诀场景口诀FOR 循环两点之间两头都算SUBSTR起始位置 取几个不是到哪INSTR找到后告诉你它在第几个位置负数索引SUBSTR 倒数开始INSTR 不动示例--练习 -- 1,开发函数 ELIM函数 实现功能 ELIM(ABBBBBCD,B) 返回 -- ELIM(ABBBBCD,B) -- 干掉 第一次出现 第二个入参的内容 -- ELIM(A-B-C,-)返回 AB-C create or replace function ELIM(str varchar2,s varchar2) return varchar2 is v_res varchar2(100); v_start number; begin if instr(str,s)0 then return str; else v_start:instr(str,s,1,1); --拼接字符串 v_res:substr(str,1,v_start-1)||substr(str,v_start1); dbms_output.put_line(v_res); return v_res; end if; end; --单独执行 select 不要选中 自定义的函数 一起执行 select ELIM(A-B-C,-)as ELIM from dual; Oracle 日期边界问题分类总结一、BETWEEN...AND 的日期边界场景语法示例是否包含结束日期实际等价条件说明日期类型无时间WHERE date_col BETWEEN DATE 2024-01-01 AND DATE 2024-01-31✅包含date_col DATE 2024-01-01 AND date_col DATE 2024-01-31包含结束日期当天 00:00:00日期类型有时间WHERE date_col BETWEEN DATE 2024-01-01 AND DATE 2024-01-31⚠️不包含31日的时间部分实际只到2024-01-31 00:00:00常见陷阱2024-01-31 14:30:00不会被查到时间戳类型WHERE ts_col BETWEEN TIMESTAMP 2024-01-01 00:00:00 AND TIMESTAMP 2024-01-31 23:59:59✅完全包含明确指定了时间边界需要精确到秒或毫秒二、常见的日期边界处理方式需求场景错误写法陷阱正确写法说明查询某一天的数据WHERE date_col DATE 2024-01-31WHERE date_col DATE 2024-01-31 AND date_col DATE 2024-02-01等于只查当天 00:00:00漏掉有时间的数据BETWEEN 查整月WHERE date_col BETWEEN DATE 2024-01-01 AND DATE 2024-01-31WHERE date_col DATE 2024-01-01 AND date_col DATE 2024-02-01BETWEEN 不包含1月31日的时间部分查询本月至今WHERE date_col BETWEEN TRUNC(SYSDATE, MM) AND SYSDATEWHERE date_col TRUNC(SYSDATE, MM) AND date_col SYSDATE 1BETWEEN 可能漏掉今天的部分时间三、日期函数边界规则函数语法边界规则示例以 2024-01-31 14:30:45 为例结果TRUNCTRUNC(date, unit)截断到指定单位的开始TRUNC(SYSDATE, MM)2024-01-01 00:00:00TRUNCTRUNC(date, DD)截断到当天的开始TRUNC(SYSDATE)2024-01-31 00:00:00LAST_DAYLAST_DAY(date)返回月份最后一天的 00:00:00LAST_DAY(DATE 2024-01-31)2024-01-31 00:00:00ADD_MONTHSADD_MONTHS(date, n)月份边界自动处理ADD_MONTHS(DATE 2024-01-31, 1)2024-02-29 00:00:00闰年NEXT_DAYNEXT_DAY(date, weekday)返回下一个指定星期几NEXT_DAY(DATE 2024-01-31, MONDAY)下一个周一 00:00:00四、常见的时间段区间写法最佳实践时间段包含边界写法说明某一天date_col DATE 2024-01-31 AND date_col DATE 2024-02-01✅ 推荐包含当天所有时间某一月date_col DATE 2024-01-01 AND date_col DATE 2024-02-01✅ 推荐包含整月某一小时date_col TIMESTAMP 2024-01-31 14:00:00 AND date_col TIMESTAMP 2024-01-31 15:00:00✅ 包含14:00:00到14:59:59本周date_col TRUNC(SYSDATE, IW) AND date_col TRUNC(SYSDATE, IW) 7周一到周日ISO标准本月date_col TRUNC(SYSDATE, MM) AND date_col ADD_MONTHS(TRUNC(SYSDATE, MM), 1)整月本季度date_col TRUNC(SYSDATE, Q) AND date_col ADD_MONTHS(TRUNC(SYSDATE, Q), 3)整季度本年date_col TRUNC(SYSDATE, YY) AND date_col ADD_MONTHS(TRUNC(SYSDATE, YY), 12)整年五、BETWEEN 与日期使用的具体示例❌ 错误示例常见陷阱sql-- 查询 2024-01-31 的所有订单 SELECT * FROM orders WHERE order_date BETWEEN DATE 2024-01-31 AND DATE 2024-01-31; -- 结果只查出 order_date 2024-01-31 00:00:00 的订单 -- 漏掉2024-01-31 14:30:00 的订单✅ 正确示例sql-- 方法1使用 和 推荐 SELECT * FROM orders WHERE order_date DATE 2024-01-31 AND order_date DATE 2024-02-01; -- 方法2使用 TRUNC但会索引失效 SELECT * FROM orders WHERE TRUNC(order_date) DATE 2024-01-31; -- 方法3精确到秒的 BETWEEN SELECT * FROM orders WHERE order_date BETWEEN TIMESTAMP 2024-01-31 00:00:00 AND TIMESTAMP 2024-01-31 23:59:59;六、日期边界核心要点速查表问题答案BETWEEN 包含结束日期吗✅ 包含但只包含结束日期的00:00:00如何包含某一天的所有时间使用 当天 AND 明天如何包含某一整月使用 当月1号 AND 下月1号DATE 类型有时间部分吗✅ 有Oracle DATE 包含时分秒TRUNC 作用是什么去掉时间部分归零到 00:00:00判断是否同一天TRUNC(date1) TRUNC(date2)✅ 记忆口诀BETWEEN 虽包含只到零点不算妙要查整天用不等大于等于小于明天好月份区间也同理上月1号到下月1号TRUNC 归零去时间比较日期最可靠日期比较大小在 Oracle 中比较日期大小有多种方式取决于你的具体需求。下面整理了几种常见的方法1. 基本比较运算符直接使用,,,,,比较DATE类型sql-- 查询某天之后的记录 SELECT * FROM orders WHERE order_date DATE 2024-01-01; -- 查询某天之前的记录 SELECT * FROM orders WHERE order_date SYSDATE; -- 查询某天当天的记录 SELECT * FROM orders WHERE order_date DATE 2024-03-15; -- 注意DATE 包含时间等于判断需要精确到秒 SELECT * FROM orders WHERE order_date TO_DATE(2024-03-15 14:30:00, YYYY-MM-DD HH24:MI:SS);2. 忽略时间部分只比较日期如果字段包含时间只想比较年月日sql-- 方法1TRUNC 函数 SELECT * FROM orders WHERE TRUNC(order_date) DATE 2024-03-15; -- 方法2TO_CHAR 格式化 SELECT * FROM orders WHERE TO_CHAR(order_date, YYYY-MM-DD) 2024-03-15; -- 方法3日期范围性能较好 SELECT * FROM orders WHERE order_date DATE 2024-03-15 AND order_date DATE 2024-03-16;3. 在查询条件中比较sql-- 获取过去7天的数据 SELECT * FROM orders WHERE order_date SYSDATE - 7; -- 获取本月数据 SELECT * FROM orders WHERE order_date TRUNC(SYSDATE, MM) AND order_date ADD_MONTHS(TRUNC(SYSDATE, MM), 1); -- 获取今年数据 SELECT * FROM orders WHERE EXTRACT(YEAR FROM order_date) EXTRACT(YEAR FROM SYSDATE);4. 在 CASE / DECODE 中比较sqlSELECT order_id, order_date, CASE WHEN order_date SYSDATE THEN Future WHEN order_date TRUNC(SYSDATE) THEN Today ELSE Past END AS status FROM orders;5. 注意事项问题说明建议OracleDATE包含年、月、日、时、分、秒比较必须完全匹配用范围查询或TRUNC索引使用TRUNC(col)会使索引失效用col BETWEEN start AND end时区TIMESTAMP WITH TIME ZONE需转换用CAST或AT TIME ZONE空值任何NULL比较返回UNKNOWN加上IS NULL检查6. 完整示例sql-- 创建测试表 CREATE TABLE test_dates ( id NUMBER, event_date DATE ); INSERT INTO test_dates VALUES (1, DATE 2024-01-15); INSERT INTO test_dates VALUES (2, TO_DATE(2024-03-20 08:30:00, YYYY-MM-DD HH24:MI:SS)); INSERT INTO test_dates VALUES (3, SYSDATE); -- 查询示例 SELECT * FROM test_dates WHERE event_date DATE 2024-02-01; SELECT * FROM test_dates WHERE TRUNC(event_date) DATE 2024-01-15; SELECT * FROM test_dates WHERE event_date BETWEEN DATE 2024-01-01 AND DATE 2024-01-31;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2592604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…