当前位置: 首页 > news >正文

Oracle中常用内置函数

一、字符串函数

  • CONCAT(s1, s2):连接两个字符串s1和s2。
SELECT CONCAT('Hello', ' World') FROM DUAL-- 结果:'Hello World'  
--或者使用 || 操作符  
SELECT 'Hello' || ' World' FROM DUAL -- 结果:'Hello World'
  • INITCAP(s):将字符串s中每个单词的首字母变为大写,其余字母变为小写。
SELECT INITCAP('hello world') FROM DUAL; -- 结果:'Hello World'
SELECT INITCAP('helloworld') FROM DUAL -- 结果:'Helloworld'
  • INSTR(s1, s2, [start, [nth_appearance]]):在字符串s1中搜索s2,返回s2首次(或第n次)出现的位置。
SELECT INSTR('aaaaaa','a') FROM dual -- 结果: 1
SELECT INSTR('aaaaaa','a',1) FROM dual -- 结果: 1
SELECT INSTR('aaaaaa','a',2) FROM dual -- 结果: 2
SELECT INSTR('aaaaaa','a',3) FROM dual -- 结果: 3SELECT INSTR('abcabcabc','abc') FROM dual -- 结果: 1
SELECT INSTR('abcabcabc','abc',1) FROM dual-- 结果: 1
SELECT INSTR('abcabcabc','abc',2) FROM dual-- 结果: 4
SELECT INSTR('abcabcabc','abc',3) FROM dual-- 结果: 4
SELECT INSTR('abcabcabc','abc',4) FROM dual-- 结果: 4
SELECT INSTR('abcabcabc','abc',5) FROM dual-- 结果: 7SELECT INSTR('abcabcabc','abc',1,1) FROM dual-- 结果: 1
SELECT INSTR('abcabcabc','abc',1,2) FROM dual-- 结果: 4
SELECT INSTR('abcabcabc','abc',1,3) FROM dual-- 结果: 7
  • LENGTH(s):返回字符串s的长度。
SELECT LENGTH('Hello World') FROM DUAL -- 结果:11
SELECT LENGTH('HelloWorld') FROM DUAL -- 结果:10
  • LOWER(s):将字符串s中的所有字符转换为小写。
SELECT LOWER('HELLO WORLD') FROM DUAL; -- 结果:'hello world'
  • UPPER(s):将字符串s中的所有字符转换为小写。
  • LPAD(s, length, [pad_string]):在字符串s的左边填充字符,直到总长度为length。
SELECT LPAD('abc',10,'*')  FROM DUAL -- 结果:'*******abc'
SELECT LPAD('abc',10)  FROM DUAL -- 结果:'       abc'
SELECT LPAD('abc',10,' ')  FROM DUAL -- 结果:'       abc'
// 第二句和第三句sql执行结果相同

SELECT LPAD('abc',10,null)  FROM DUAL 
SELECT LPAD('abc',10,'')  FROM DUAL 

  • LTRIM(s, [trim_characters]):从字符串s的左边删除指定的字符(默认为空格)。
SELECT LTRIM('abcdefg','ab') FROM dual -- cdefg
SELECT LTRIM('abcdefg','abcdef') FROM dual -- g
SELECT LTRIM('abcdefg','efg') FROM dual -- cdefg
SELECT LTRIM('abcdefg') FROM dual -- abcdefg
SELECT LTRIM('    abcdefg') FROM dual -- abcdefg
  • RPAD(s, length, [pad_string]):在字符串s的右边填充字符,直到总长度为length。
  • RTRIM(s, [trim_characters]):从字符串s的右边删除指定的字符(默认为空格)。
  • SUBSTR(s, start, [length]):从字符串s的start位置开始截取length个字符。
SELECT SUBSTR('Hello World', 1, 5) FROM DUAL -- 结果:'Hello'
  • REPLACE(s, search_string, replace_string):在字符串s中替换所有的search_string为replace_string。
SELECT REPLACE('abcdefg','a','*') FROM dual -- *bcdefg
SELECT REPLACE('abcdefg','b','*') FROM dual -- a*cdefg
SELECT REPLACE('abcdefg','ab','*') FROM dual -- *cdefg
SELECT REPLACE('abcdefg','x','*') FROM dual -- abcdefg
SELECT REPLACE('aabb','a','*') FROM dual -- **bb
SELECT REPLACE('aabb','aa','*') FROM dual -- *bb

二、数值函数

  • ABS(n):返回n的绝对值。
SELECT ABS(-10) FROM DUAL; -- 结果:10
  • CEIL(n):返回大于或等于n的最小整数。
  • FLOOR(n):返回小于或等于n的最大整数。
  • MOD(m, n):返回m除以n的余数。
  • POWER(m, n):返回m的n次幂。
  • ROUND(n, m):将n四舍五入到小数点后m位。
  • SIGN(n):如果n是正数返回1,是负数返回-1,否则返回0。
  • SQRT(n):返回n的平方根。
  • TRUNC(n, m):根据m的值截取n。如果m为正,则截去小数点后的m位;如果m为负,则截去小数点前的m位。
SELECT TRUNC(123.456, 2) FROM DUAL -- 结果:123.45
SELECT TRUNC(123.456, 1) FROM DUAL -- 结果:123.4
SELECT TRUNC(123.456, 0) FROM DUAL -- 结果:123
SELECT TRUNC(123.456, -1) FROM DUAL -- 结果:120
SELECT TRUNC(123.456, -2) FROM DUAL -- 结果:100

三、日期函数

  • SYSDATE:返回当前系统日期和时间。
SELECT SYSDATE FROM DUAL -- 返回当前日期和时间  2024-06-28
  • ADD_MONTHS(date, number):返回date之后number个月的日期。
SELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL -- 返回当前日期后一个月的日期  2024-07-28
SELECT ADD_MONTHS(SYSDATE, 2) FROM DUAL -- 返回当前日期后一个月的日期  2024-08-28
SELECT ADD_MONTHS(SYSDATE, 12) FROM DUAL -- 返回当前日期后一个月的日期  2025-06-28
  • LAST_DAY(date):返回date所在月份的最后一天的日期。
SELECT LAST_DAY(SYSDATE) FROM DUAL -- 返回当前月份的最后一天  2024-06-30
SELECT LAST_DAY(ADD_MONTHS(SYSDATE,1)) FROM DUAL --   2024-07-31
  • MONTHS_BETWEEN(date1, date2):返回date1和date2之间相差的月数。
SELECT MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, -1)) FROM DUAL -- 结果:1
  • NEXT_DAY(date, day_of_week):返回date之后的第一个day_of_week的日期。
SELECT SYSDATE  FROM DUAL -- 结果:2024-06-28
SELECT NEXT_DAY(SYSDATE,1)  FROM DUAL -- 查找2024-6-28之后的下一个星期日的日期 结果:2024-06-30
SELECT NEXT_DAY(SYSDATE,2)  FROM DUAL -- 查找2024-6-28之后的下一个星期三的日期 结果:2024-07-01
SELECT NEXT_DAY(SYSDATE,5)  FROM DUAL -- 结果:查找2024-6-28之后的下一个星期四的日期 2024-07-04
SELECT NEXT_DAY(SYSDATE,7)  FROM DUAL -- 结果:查找2024-6-28之后的下一个星期六的日期 2024-06-29
// 1,2,3,4,5,6,7分别代表周日,周一,周二,周三,周四,周五,周六

 

  • TO_CHAR(date, 'format'):将日期date转换为指定'format'格式的字符串。
SELECT TO_CHAR(SYSDATE,'yyyy-MM-dd')  FROM DUAL -- 结果:2024-06-28
SELECT TO_CHAR(SYSDATE,'yyyy-MM')  FROM DUAL -- 结果:2024-06
SELECT TO_CHAR(SYSDATE,'yyyy-MM-dd')  FROM DUAL -- 结果:2024-06-28
SELECT TO_CHAR(SYSDATE,'yyyy-MM-dd hh:mm:ss')  FROM DUAL -- 结果:2024-06-28 07:06:29
  • TO_DATE(string, 'format'):将字符串string按照指定'format'格式转换为日期。
SELECT TO_DATE('2023-10-23', 'YYYY-MM-DD') AS converted_date FROM DUAL;--2023-10-23
SELECT TO_DATE('2024-5-20 23:59:59', 'yyyy-MM-dd HH24:mi:ss') FROM dual-- 结果:2024-05-20

 需要注意format格式:

正确格式:yyyy-MM-dd HH24:mi:ss或yyyy-MM-dd HH:mi:ss

 四、转换函数

  • TO_CHAR(x, 'format'):将数字x或日期转换为指定'format'格式的字符串。
  • TO_DATE(s, 'format'):将字符串s按照指定'format'格式转换为日期。
  • TO_NUMBER(s, 'format'):将字符串s按照指定'format'格式转换为数字。
SELECT TO_NUMBER('123') FROM DUAL; -- 结果:123

 五、统计函数(聚合函数)

  • AVG(columnName):返回columnName的平均值。
SELECT AVG(salary) FROM employees; -- 返回员工的平均工资
  • COUNT(columnName):返回columnName的记录数。
  • MAX(columnName):返回columnName的最大值。
  • MIN(columnName):返回columnName的最小值。
  • SUM(columnName):返回columnName的总和。

六、其他函数

  • NVL(expression1, expression2):如果expression1为NULL,则返回expression2的值;否则返回expression1的值。
SELECT NVL('abc', 'No Value') FROM DUAL -- 结果:abc
SELECT NVL(NULL, 'No Value') FROM DUAL -- 结果:'No Value'
SELECT NVL(NULL, '没有值') FROM DUAL -- 结果:没有值
SELECT NVL('', '没有值') FROM DUAL -- 结果:没有值
  • DECODE(expression, search1, result1, [search2, result2, ...], default):类似于其他编程语言中的switch-case语句,根据expression的值返回对应的结果。

SELECT DECODE(5000, 5000, 'Low', 10000, 'High', 'Medium') AS salary_range  FROM dual -- 结果: Low
SELECT DECODE(10000, 5000, 'Low', 10000, 'High', 'Medium') AS salary_range  FROM dual -- 结果: High
SELECT DECODE(123, 5000, 'Low', 10000, 'High', 'Medium') AS salary_range  FROM dual -- 结果: Medium
// 将传入的第一个值与5000,10000相比较,第一个参数的值等于5000,输出low,第一个参数的值等于10000输出high,第一个参数的值既不等于5000也不等于10000则输出medium

注意事项:

  • 从Oracle 11g开始,虽然DECODE函数仍然可用,但Oracle官方推荐使用CASE语句代替DECODE函数,因为CASE语句在某些情况下可能具有更好的可读性和灵活性。
  • 每个search_valueN只能出现一次,但可以有多个连续的result_valueN作为条件判断的结果。
  • 如果expression的值为NULL,它将与NULL search_valueN匹配(如果存在)。

相关文章:

Oracle中常用内置函数

一、字符串函数 CONCAT(s1, s2):连接两个字符串s1和s2。 SELECT CONCAT(Hello, World) FROM DUAL-- 结果:Hello World --或者使用 || 操作符 SELECT Hello || World FROM DUAL -- 结果:Hello World INITCAP(s):将字符串s…...

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展,冷库成为储存食材、保证食品质量的重要场所。 然而,由于冷库环境的特殊性,如密封性强、温度低、湿度大等,一旦冷库内发生可燃气体泄露,后果将不堪设想。因此,在餐饮冷库中安装并合理…...

中国能源统计年鉴(1986-2023年)

数据年份:1986-2023年,无1987、1988、1990三年,1991-2023年齐 数据格式:pdf、excel 数据内容:《中国能源统计年鉴》是一部反映中国能源建设、生产、消费、供需平衡的权威性资料书。 共分为7个篇章:1.综合&a…...

摄像头画面显示于unity场景

🐾 个人主页 🐾 🪧阿松爱睡觉,横竖醒不来 🏅你可以不屠龙,但不能不磨剑🗡 目录 一、前言二、UI画面三、显示于场景四、结语 一、前言 由于标题限制,这篇文章主要是讲在unity中调用摄…...

Double 4 VR智能仿真教学系统在国际邮轮乘务管理专业课堂上的应用

随着科技的不断发展,虚拟现实技术(VR)在教育领域的应用越来越广泛。国际邮轮乘务管理专业作为一门实践性较强的专业,传统的课堂教学方法已经无法满足学生的需求。因此,将Double 4 VR智能仿真教学系统应用于国际邮轮乘务…...

QSPI四线SPI:D0、D1、D2、D3

在SPI(串行外设接口)通信中,D0、D1、D2、D3通常指的是数据线,也叫做数据引脚或通道。这些引脚的使用可能会根据具体设备或配置的不同而有所变化。 标准的SPI通信接口通常包含以下四个主要引脚: MOSI(Master…...

vue3通过vue-video-player实现视频倍速、默认全屏、拖拽进度条等功能

效果图: 1、场景: js原生的video标签在不同浏览器及不同型号手机上都展示的不一样,一部分没有倍速,一部分没有全屏等功能,为了统一视频播放的交互功能,使用vue-video-player插件来完成,vue-vid…...

微信小程序 点击左上角返回弹窗提示

业务需求:当页面表单没有提交直接返回时,要提示用户是否保存当前信息,如果已经提交就不提示了。 由于微信小程序是无法监听右上角按钮返回事件。 所以就换个思路 小程序提供了如下两个Api wx.enableAlertBeforeUnload(Object object)&…...

openEuler 22.03 (LTS-SP1)服务器用ntpd同步GPS时间服务器的案例

本文记录了openEuler 22.03 (LTS-SP1)的二级时间服务器用chronyd不能自动同步GPS时间服务器,改用ntpd同步GPS时间服务器成功的案例 一、环境简述 1、本环境中有两台GPS一级时间服务器,IP如下: 192.168.188.66 192.168.188.74 2、有一台o…...

Git的安装以及使用

一.简单介绍 1.1版本控制 版本控制是指对软件开发过程中各种程序代码,配置文件及说明文档等文件变更管理,是软件配置管理的核心思想之一。 版本控制最重要的内容是追踪文件的变更,它将什么时候,什么人更改了文件的什么内容等信息忠实的记录…...

双路视频同屏显示(拼接)-基于野火Zynq7020开发板

前情提要 米联客FDMA驱动OV5640摄像头—基于野火Zynq7020开发板 本文在此基础上,实现了双路视频拼接。将ov5640输出的1024600的图像数据缩放为512600,分两路写入ddr3,并且显示在1024*600的RGB屏幕中。 纯FPGA也可以按此方法实现。 总体BLOC…...

ForkJoinPool浅析

一,概述 相比传统的线程池ExecuteService,ForkJoinPool的优势在于能采用分治算法、工作窃取算法高效利用CPU资源,如下图 Fork即拆分,Join即合并, 通过将大任务拆分成多个小任务,在多个线程中执行后,合并结果即可得到大任务的结果,经典的例子有归并排序、超大数组求和…...

【AI-小米机器狗】Dockerfile包含SSH和SFTP

通过这些步骤,可以在docker容器中安装运行SSH和SFTP服务,设置ssh和sftp的密码,克隆指定的Git仓库到/home目录,并使用bash作为入口点, # 基于原始镜像 FROM cyberdog_sim:v1# 更新包列表并安装OpenSSH服务器和git RUN …...

仿真CAN报文发送的CRC校验算法(附CAPL代码)

文章目录 前言一、为什么CAN报文有CRC?二、怎么确定是否需要做CRC校验?三、CAPL代码实现CRC算法 前言 关于CRC校验的基本理论、算法实现网上已经有很多介绍文章,本文不再赘述。只是记录在项目测试中真正开发CRC算法并进行测试的一些体会。 …...

如何在Android应用中最佳实现“Edge to Edge“特性?

Edge to Edge"特性 要在Android应用中最佳实现"Edge to Edge"特性,可以按照以下步骤进行操作: 1. 设置目标版本:将应用的目标版本设置为Android Q或更高版本。在build.gradle文件中,将targetSdkVersion设置为Q。 2. 设置主题样式:在styles.xml文件中,创…...

多租户与低代码开发的应用:解锁企业数字化转型的无限可能

在数字化转型的浪潮中,多租户与低代码开发已经成为推动企业快速、灵活、安全地构建和部署应用的关键技术。本文将深入探讨这两种技术的结合如何为企业带来前所未有的变革和机遇。 多租户架构:资源共享与隔离的艺术 多租户架构,是一种高级的软…...

出现身份验证错误,无法连接到本地安全机构 顺利解决这个问题希望能帮助大家

出现身份验证错误,无法连接到本地安全机构,远程计算机:XX,这可能是由于密码过期,如果密码已过期请更新密码。 我们可以在系统属性中对远程进行设置,以解决远程桌面无法连接到本地安全机构这一问题。 步骤…...

老师把卷子拍成图片如何打印

如今,老师们经常会把试卷、习题拍成图片分享给学生(如通过微信群或钉钉群的形式)。但随之而来的问题是,这些图片如何方便地打印出来呢?尤其是当面对一张张精美的试卷图片时,许多学生和家长都感到头疼。 一…...

MySQL数据库(三):读取数据库数据

上一节,我们介绍了数据库的基本操作,以及最后演示了如何使用库来连接数据库,在实际应用中,我们通常需要按照指定的条件对数据库进行操作,即增删改查操作,这是非常重要的!这一节我们继续通过一个…...

分销裂变实战:PLG模式如何助力企业突破增长瓶颈

在竞争激烈的商业环境中,企业如何快速、有效地实现增长,一直是业界关注的焦点。近年来,分销裂变作为一种新兴的商业模式,凭借其独特的优势,逐渐受到企业的青睐。而产品驱动增长(PLG)模式更是为分…...

从仿真到PCB:基于74LS系列芯片的十字路口交通灯系统实战设计

1. 项目背景与设计目标 十字路口交通灯控制系统是数字电路课程的经典实践项目。记得我第一次接触这个课题时,既兴奋又忐忑——兴奋的是终于能把课本上的与非门、触发器应用到真实场景,忐忑的是从仿真到实物可能存在的各种"坑"。这个基于74LS系…...

【DeepSeek Service Mesh安全白皮书首发】:零信任网络策略如何实现API级微隔离与自动证书轮转?

更多请点击: https://intelliparadigm.com 第一章:DeepSeek Service Mesh安全白皮书发布背景与核心价值 随着云原生架构在金融、政务及大规模企业级场景中深度落地,服务间通信的可信性、策略一致性与零信任合规性已成为架构演进的关键瓶颈。…...

探索One-Language/One:统一编程范式如何重塑全栈开发体验

1. 项目概述:从“One”到“One-Language/One”的深度解构最近在GitHub上看到一个挺有意思的项目,叫“One-Language/One”。光看这个名字,可能很多人会有点懵,这到底是个啥?是又一个编程语言?还是一个框架&a…...

基于本地AI的语音转文字工具OpenWhisp:隐私优先的离线生产力方案

1. 项目概述:一个完全本地的语音转文字工具 作为一个长期在效率工具和本地AI应用领域折腾的开发者,我一直在寻找一个能让我彻底摆脱网络延迟和隐私顾虑的语音输入方案。市面上的云服务要么有订阅费,要么有数据上传的隐忧,直到我看…...

避开BUUCTF《Life on Mars》的思维陷阱:当information_schema查询结果‘不对劲’时,你的排查清单应该有哪些?

破解BUUCTF《Life on Mars》的数据库迷局:当information_schema说谎时的七种侦查策略 在CTF赛场上,SQL注入类题目往往不会按教科书上的剧本发展。当你在BUUCTF《Life on Mars》这道题中执行group_concat(database()) from information_schema.schemata却…...

孤舟笔记 IO 与网络编程篇六 什么是网络四元组?它是理解TCP连接的关键

文章目录一、先说结论:四元组核心事实二、四元组是什么?三、一个端口能建立多少连接?四、客户端的连接上限五、NAT 和四元组六、四元组在负载均衡中的应用网络四元组 全景回答技巧与点评标准回答加分回答面试官点评个人网站面试官问"一个…...

从Excel到BI Launchpad:SAP BW/4HANA数据分析实战,手把手教你用BO做报表

从Excel到BI Launchpad:SAP BW/4HANA数据分析实战指南 1. 企业级数据分析的进化之路 在当今数据驱动的商业环境中,企业数据分析正经历着从静态报表到动态洞察的革命性转变。传统Excel虽然灵活易用,但在处理海量数据、实现实时协作和构建企业级…...

优化ESP32 ADF 音频问题

可以,现在已经进入音质调试阶段了,不是“能不能播放”的阶段。 你现在的问题大概率不是一个单点问题,而是下面几类之一: 1. 音量 / 增益太大,导致 ES8388 或 MD8002A 功放削顶失真 2. I2S 时钟不准,导致声音…...

手把手教你用Gstreamer和V4L2在Zynq MPSoC上搭建视频流Pipeline(HDMI IN to DP OUT)

从HDMI到DP:Zynq MPSoC视频流处理全链路实战指南 当你的Zynq MPSoC开发板已经完成硬件设计,Petalinux系统也顺利启动,却发现HDMI输入的视频信号无法正确显示在DP接口的显示器上——这种"最后一公里"的集成问题往往最令人抓狂。本文…...

3分钟掌握B站缓存视频转换:m4s-converter终极使用指南

3分钟掌握B站缓存视频转换:m4s-converter终极使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困扰&a…...