SQL 操作符 与 单双引号
1、
SQL 操作符的优先级从高到低顺序:算术操作符->连接操作符->比较操作符->NOT->AND->OR
算术操作符:加(+)、减(-)、乘(*)、除(/),其中除号(/)的结果是浮点数。求余运算只能借助函数:MOD(x,y):返回x除以y的余数。
|
+、-、×、÷
|
比较操作符
|
=、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等
|
区间查询
|
between …… and ……
|
关键字集合查询
|
in
|
模糊查询
|
like
|
判断是否为空
|
is null 或 is not null
|
逻辑操作符
//select * from emp t where t.sal is not null and t.comm is not null;
|
与(AND)、或(OR)、非(NOT)
|
连接操作符号。用于将两个或多个字符串合并成一个字符串,或将一个字符串与一个数值合并在一起
select t.empno,t.ename || '_' || t.sal from emp t ;
|
两根竖杠 "||",用于将多个字符串或数据值合并成一个字符串
|
2、
Oracle 单双引号
1、
Oracle 中字符串用单引号,别名用双引号。
--拼接的字符必须是单引号,别名没有空格时,可以不带引号,有空格时,必须使用引号,且必须是双引号
select t.*,'0000' || 'A' as "编 码" from emp t where t.job = 'MANAGER';
-- 两个单引号可以用于转义,如 is ''':第一个是普通的单引号,第二个是对第三个进行转义
SELECT distinct
'comment on column bas_person_log.' || t.COLUMN_NAME ||' is ''' || t.COMMENTS || ''';' as coms
FROM user_col_comments t where t.TABLE_NAME in ('BAS_AGENCY_INFO','BAS_AGENCY_EXT');
Oracle SQL 操作。
Oracle 函数概述
1、Oracle sqL 提供了用于执行特定操作的专用函数,这些函数大大增强了 SQL 语言的功能。函数可以接受零个或者多个输入参数,并返回一个输出结果。 Oracle数据库中主要使用两种类型的函数:
单行函数
对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果,
比如:MOD(x,y)返回 x 除以 y 的余数 (x和y)可以是两个整数,也可以是表中的整数列)
|
常用的单行函数有:
字符函数:对字符串操作。
数字函数:对数字进行计算,返回一个数字。
转换函数:将一种数据类型转换为另外一种数据类型。
日期函数:对日期和时间进行处理。
|
聚合函数
|
聚合函数同时可以对多行数据进行操作,并返回一个结果。比如SUM(x) 返回结果集中ⅹ列的总合。
|
1、对多行的某一列进行处理。常用的有 max()、min()、count()、avg()、sum() 等
select
max
(sal) from emp; --取最大值
select max(sal) as max_sal from scott.emp t where t.deptno = 100;
|
--查询最高薪资。sal 为 null 的值会自动忽略。
--当 select 没有查询到数据时,max_sal会等于null,而不是无记录返回。
|
select max(to_number(code)) as code from gbm_bs_person_type t
-- 如果字段是字符串类型的数字,则必须先转为数字,否则会出现 '9' 比 '888' 大.
|
select
min
(sal) from emp; -取最小值
select min(sal) as min_sal from scott.emp t where t.deptno = 100;
|
--查询最低薪资。sal 为 null 的值会自动忽略
--当 select 没有查询到数据时,min_sal 会等于null,而不是无记录返回。
|
select
sum
(sal) from emp; --求和
select sum(sal) as sum_sal from scott.emp t where t.deptno = 100;
|
--统计员工薪资总和
--当 select 没有查询到数据时,sum_sal 会等于null,而不是无记录返回。
|
select sum(comm) from emp;
|
--统计员工奖金总和。为 null 的值会自动忽略
|
select
count
(*) from emp; --获取个数
|
--统计员工总数.
|
select count(1) as c from scott.emp t where t.deptno = 100;
|
--统计员工总数。建议使用常数代替 "*";当没有数据时,返回 0
|
select
avg
(comm) from emp; --求平均值
select avg(sal) as avg_sal from scott.emp t where t.deptno = 100;
|
--统计平均奖金。当 comm 有 null 值,则计算结果是错误的。
--当 select 没有查询到数据时,avg_sal 会等于null,而不是无记录返回。
|
select
sum
(comm)/count(1) from emp;
|
--统计平均奖金。当 comm 有 null 值时,可以使用此种方式
|
数值函数接受数字参数,这些参数可以是表中的列,也可以是一个字符串表达式。
select
abs
(-100) as val from dual; --求绝对值
|
--输出 100
|
select
ceil
(3.14159) from dual;
|
--向上取整
|
select ename,job,ceil(sal) from emp;
|
--对所有用户的工资向上取整
|
select
floor
(3.14159) from dual;
|
--向下取整
|
select ename,job,floor(sal) from emp;
|
--对所有用户的工资向下取整
|
select
round
(2.14159,3) from dual;
|
--四舍五入。round(x,[y]),y缺省时默认为0
|
select ename,job,round(sal) from emp;
|
--对所有用户的工资四舍五入
|
trunc(number,number ) 用于截断浮点型数据,.
第二个参数表示截断小数点后面的第几位,不会进行四舍五入,number 默认为0。如果第一个参数是字符串,则报错。
|
select trunc(3.14159,3) from dual;
|
--截断小数点后面第3位,输出 3.141
|
select trunc(3.14159,1) from dual;
|
--截断小数点后面第1位,输出 3.1
|
select trunc(3.14159,0) from dual;
|
--截断小数点后面第0位,输出 3
|
select ename,job,trunc(sal,0) from emp;
|
--对薪资进行取整.截断是没有四舍五入的
|
select
mod
(10,3) from dual; --mod 求余函数
|
--输出 1.
|
select mod(10,4) from dual;
|
--输出 2.
|
select mod(10,5) from dual;
|
--输出 0.
|
select ename ,job, mod(sal,30) from emp;
|
--薪资除以30后的余数
|
Select
power
(2,10) 二的十次方 from dual; --求次方
|
-- power(a,b) :获取的 a 的 b 次方
|
select
Sqrt
(16) 十六的开方 from dual; --求平方
|
-- sqrt(x) :获取 x 的 二分之一次方
|
字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。
1、
concat
(字符串1,字符串2) —– 连接字符串,2 个参数
2、
lower
(str):字符串转小写,
upper
(str):字符串转大写
select concat('长沙','星城') as citi from dual;
|
--输出 长沙星城
|
select t.stuid,concat(t.stuname,'·'||t.gender),t.age,t.classno from student t;
|
--拼接用户的姓名与性别,同时中间使用 '·' 符号隔开
|
select lower('AbcD') from dual;
|
--输出 abcd
|
select
upper
('AbcD') from dual;
|
--输出 ABCD
|
select t.stuid,lower(t.stuname) from student t;
|
--查询学生学号与姓名,姓名中的英文字母转小写输出。
|
substr(str,startIndex,length):
str 被截取的字符串,startIndex 从1开始,0也是表示1.
pl/sql示例1
。
|
select substr('ZhangSan',0,3) from dual;
|
--输出 Zha
|
select substr('ZhangSan',1,3) from dual;
|
--输出 Zha
|
select substr('ZhangSan',2,3) from dual;
|
--输出 han
|
select substr('ZhangSan',3,3) from dual;
|
--输出 ang
|
select substr(ename,1,3) ,job from emp;
|
--截取员工姓名的前3个字符
|
select
length
('张无忌') from dual;
|
--输出3 length 函数用于求字符串长度
|
select length(' 张无忌 ') from dual;
|
--输出 7
|
select length(ename) from emp;
|
--输出所有员工姓名的长度
|
--
ltrim():去左边空格,rtrim():去右边空格,trim():去两边空格
|
select trim(' 张无忌 ') from dual;
|
--输出去掉收尾空格后的 "张无忌". trim() 函数用于去掉字符串首尾的空格
|
select length(trim(' 张无忌 ')) from dual;
|
--输出 3
|
select
replace
('赵敏','敏','敏敏特穆尔') from dual; -- 字符串替换函数
|
--输出 "赵敏敏特穆尔" replase函数用于替换字符串中的指定字符
|
select replace(ename,'A','a') from emp;
|
--替换员工姓名中的大写字母"A" 为 'a'
|
select ascii
('
a') as a ,ascii('A') as A,t.dname, ascii(t.dname) as dname from DEPT t;
|
ascii:返回与指定的字符对应的十进制数;
|
select
chr
(65) as a ,chr(97) as A,t.deptno, chr(t.deptno) as deptno from DEPT t;
|
chr:给出整数,返回对应的字符;
|
select
initcap
('china') as a ,t.dname, initcap(t.dname) as dname from DEPT t;
|
initcap:返回字符串并将字符串的第一个字母变为大写,其余位置字母为小写;
|
lpad
(目标内容, 目标长度,往左侧填充的内容)
:在目标内容的左侧填充内容,直到达目标长度,未指定填充内容时,默认为空格。
rpad
(目标内容, 目标长度,往右侧填充的内容)
:在目标内容的右侧填充内容,直到达目标长度,未指定填充内容时,默认为空格。
特别注意
,如果目标内容的长度小于目标长度,则会对目标内容进行截取,后面多余会直接舍弃。
-- 09 09 0
select lpad('9',2,'0'), lpad('09',2,'x'), lpad('09',1,'x') from dual;
-- Test
select lpad('Test', 10) from dual;
--生成2013年1到12月,如 201302、201310
select SUBSTR('2013xx', 1, 4) || lpad(level, 2, 0) ymd from dual connect by level<=12;
--查询编号为7839的员工,及其下属的员工,并标记级次(从1开始),并在名字前标记#号,是几级就加几个前缀#
--如 #KING、###SCOTT
select level, empno, rpad('#', level, '#') || ename ename from emp start with empno = 7839 connect by prior empno = mgr;
|
|
|
字符串查找函数 Instr()
1、Oracle 字符串查找函数 Instr() 语法:instr(string, substring [, start_position [, count ]])
1、string :要搜索的目标字符串,字符串可以是 char,varchar2,nchar,nvarchar2,clob 或 nclob 等类型。
2、substring : 要在目标字符串(string)中搜索的子字符串,子字符串可以是 char,varchar2,nchar,nvarchar2,clob 或 nclob 等类型。
3、start_position : 可选。开始检索的位置,目标字符串中第一个位置为 1,不写时默认为 1;如果 start_position 为负数,则表示从后往前检索,如 -1 表示倒数第 1 个字符。
4、count : 可选。substring 子串第 count 次出现的位置,省略时,默认为 1
5、返回值:返回子字符串在目标字符串中出现的位置,如果没有找到,则返回 0.
|
select empno,ename,
case --职位(job) 以 'A' 开头的设置 html 红色,以 'B'开头的设置 html 蓝色
when instr(job,'A') = 1 then '<span style="color:red">'|| job || '</span>'
when instr(job,'C') = 1 then '<span style="color:blue">'|| job || '</span>'
else job end as job,
mgr,hiredate,sal,comm,deptno
from emp;
--数字同样可以查找
select instr(1, 1),instr(1, 2) from dual;-- 输出 1,0
select instr(1, '1'),instr(1, '2') from dual;-- 输出 1,0
select
sysdate
from dual;
|
--输出 Oracle 服务器系统的当前时间
|
select sysdate + 7 from dual;
|
--查询7天后的当前时间
|
select
add_months
(sysdate,3) from dual;
select
add_months
(sysdate,-1) from dual;
--负数表示减去,即上个月
|
--查询3个月后的当前时间
ADD_MONTHSI(d,n),在某一个日期d上,加上指定的月数n,返回计算后的新日期。
d表示日期,n表示要加的月数。
|
select sysdate - hiredate from emp;
|
--查询员工入职的天数。
|
select round(sysdate - hiredate) from emp;
|
--查询员工入职的天数。对结果进行四舍五入。
|
select ceil((sysdate - hiredate)/7) from emp;
|
--查询员工入职的周数。结果向上取整
|
select
months_between
(sysdate , hiredate) from emp;
|
--查询员工入职的月数
|
select months_between(sysdate , hiredate)/12 from emp;
|
--查询员工入职的年数
|
--LAST_DAY(d)
select sysdate,
last_day
(sysdate) from dual;
|
返回指定日期当月的最后一天。
|
select
next_day
(sysdate,'星期二') from dual;
|
--查询紧邻指定日期最近的下一个星期几
|
insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7854, '张三', 'salesman', 9598, sysdate, 1300.00, 320.00, 30);
|
--插入数据,日期使用 sysdate 设置
|
select sysdate,(sysdate) + 30 / (24 * 60 * 60) from dual t;--当前时间加 30秒:2021/9/5 17:13:02 2021/9/5 17:13:32
select sysdate,(sysdate) + 30 / (24 * 60) from dual t;--当前时间加 30分钟:2021/9/5 17:13:38 2021/9/5 17:43:38
select sysdate,(sysdate) + 3 / 24 from dual t;--当前时间加 3小时:2021/9/5 17:14:29 2021/9/5 20:14:29
|
|
|
1、转换函数将值从一种数据类型转换为另外一种数据类型,通用的类型转换可以使用
cast 函数数据类型转换
select 100 +
to_number
('50') from dual; --字符串转数值
|
--输出 150。to_number(str):字符串转数值
|
select 100 + '50' from dual;
|
--输出150。默认也会自动转换的。
|
数字转换字符串,格式: to_char(number [,'格式']);
-- 注意事项1:'9' 表示如果存在数字则显示数字,不存在则显示空格。
-- 注意事项2:'0' 表示如果存在数字则显示数字,不存在则显示0,即占位符。
-- 注意事项3:'$' 表示金额符号
-- 注意事项4:格式中的位数不能小于 number 的位数,否则结果就是 ################
-- 注意事项5:'x' 表示十六进制.
-- 注意事项6:'FM' 表示删除因为'9'带来的空格。
|
-- 纯数字转字符串:88877.2561
select to_char(88877.2561) from dual;
-- 纯数字转字符串:.2561
select to_char(0.2561) from dual;
|
-- 如果小于1,必须加0:-0.860
select trim(to_char(-0.8596,'0.999')) from dual;
-- 如果小于1,必须加0: 0.187
select trim(to_char(0.18654,'0.999')) from dual;
-- -485.000
select trim(to_char(-485, '999999999.000')) from dual;
-- 148.500
select trim(to_char(148.5,'999999999.000')) from dual;
|
-- 转为10位整数(小数部分舍弃),不足的前面补0:0000088455
select trim(to_char(88455,'0999999999')) from dual;
-- 转为10位整数,小数部分保留3位(四舍五入),不足的前面补0:0000088455.256
select trim(to_char(88455.2556,'0999999999.000')) from dual;
-- 每三位用逗号分隔(小数部分舍弃):8,545,150,212
select trim(to_char(8545150212.2557,'999,999,999,999')) from dual;
-- 每三位用逗号分隔,小数部分保留3位(四舍五入):8,545,150,212.256
select to_char(8545150212.2557,'FM999,999,999,999.000') from dual;
|
-- 金额格式转换:$8,545,150,212.256
select trim(TO_CHAR(8545150212.2557,'$999,999,999,999.999')) from dual;
-- 10进制转化为16进制(小数部分不会转):b267
select trim(to_char(45671,'xxxxxxxxx')) from dual;
|
to_char(date,'pattern'):日期转字符串
|
select
to_char
(sysdate,'yyyy-mm-d hh:mi:ss') from dual; --日期转字符串
|
--格式化日期为指定格式的字符串。默认为 12小时制
|
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
|
--格式化日期为指定格式的字符串。指定为 24小时制
|
select to_char(sysdate,'yyyy') from dual;
|
--输出年份,如 2019
|
select to_char(sysdate,'mm') from dual;
|
--输出月份,如 05
|
select to_char(sysdate,'dd') from dual;
|
--输出日期,如 28
|
select to_char(sysdate,'hh24') from dual;
|
--输出小时(24小时制),如 15
|
select to_char(sysdate,'mi') from dual;
|
--输出分钟,如 04
|
select to_char(sysdate,'ss') from dual;
|
--输出秒钟,如 40
|
select to_char(sysdate,'dd') from dual;
|
--表示一个月中的第几天
|
select to_char(sysdate,'ddd') from dual;
|
--表示一年中的第几天
|
select empno,ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;
|
--格式化日期输出
|
select to_char(sysdate,'d') from dual;
|
--表示一个星期中的第几天,1表示星期天,2表示星期1,以此类推
|
select to_char(sysdate,'day') from dual;
|
--输出当前是星期几,比如:星期五
|
to_date('str','pattern'):字符串转日期
|
select to_date('2019-08-25 09:25:33','yyyy-mm-dd hh:mi:ss') from dual;
|
--输出 2019/8/25 9:25:33。 12小时制时,小时数不能超过12,否则报错。
|
select to_date('2019-08-25 19:25:33','yyyy-mm-dd hh24:mi:ss') from dual;
|
--输出 2019/8/25 19:25:33。 24小时制
|
select to_date('2019-08-25 09:25','yyyy-mm-dd hh:mi') from dual;
|
--输出 2019/8/25 9:25:00
|
select * from emp where hiredate between to_date('1981-06','yyyy-mm') and to_date('1982-07','yyyy-mm');
|
--查询 1981年6月 到 1982年7月入职的员工
|
--对当前时间只取 年-月-日
select to_date(to_char(sysdate,'YYYY-MM-DD'),'YYYY-MM-DD') as sydate from dual;
|
doc/oracle 中 to_char用法 - 普罗米修斯y - 博客园.pdf · 汪少棠/material - Gitee.com
。
1、
nvl
(param1,param2):如果 param1 等于 null,则返回 param2,否则返回 param1 自身。
2、
nvl2
(param1,param2,param3):如果 param1 等于 null,则返回 param3,否则返回 param2。
3、
nullif
(param1,param2):如果 param1 等于 param2 ,则返回 null,否则返回 param1.
4、
decode
(表达式,值1,结果1,[值2,结果2...][,否则]:
select 中实现 if else 功能。
5、
coalesce
(expression1, expression2, ...
:
返回列表中第一个非null表达式的值,如果所有表达式求值为null,则返回 null,比如 expression1 结果不为 null 时,则返回它,否则判断expression2结果是否为null,不为 null 时,则返回expression2,依此类推。
千万注意:Oracle 中值为 null 的字段是不能做算术运算的,比如加减乘除、它的结果会恒为 null,此时可以借助 nvl 函数。
update temp set f8 = f1 + f2 + f3 where id = 2;--只要 f1,f2,f3 中有一个值为 null,则 f8 会恒为 null
select nvl(null,'is null') from dual;
|
--输出 is null
|
select nvl('Hi','is null') from dual;
|
--输出 Hi
|
select nvl2(null,100,200) from dual;
|
--输出 200
|
select nvl2('Hi',100,200) from dual;
|
--输出 100
|
select ename,job,nvl(comm,50) from emp;
|
--没有奖金的员工统一加上 50
|
select ename,job,nvl2(comm,comm+50,150) from emp;
|
--没有奖金的员工统一加上 150,有奖金的再加上 50
|
select nullif(100,100) from dual;
|
--输出 null
|
select nullif(100,120) from dual;
|
--输出 100
|
select t.*,
decode
(t.job,'MANAGER','经理','CLERK','办事员','SALESMAN','推销员','普通员工') as personRank from emp t;
|
select EMPNO,ENAME,JOB,MGR,HIREDATE,sal,
coalesce(COMM,0)
as COMM,DEPTNO from emp; -- 如果奖金为 null,则输出0
|
|
忽略大小写查询字符串
1、当想要忽略大小写查询字符串时,可以通过如下方式进行查询
-- 方式1:参数与数据库值统一转为大写进行查询
SELECT T.* FROM emp t where upper(t.ename) = upper('Scott');
-- 方式2:参数与数据库值统一转为小写进行查询,
SELECT T.* FROM emp t where lower(t.ename) = lower('Scott');
-- 方式2 initcap 函数,将字符串的第一个字母变为大写,其余位置字母为小写
SELECT T.* FROM emp t where initcap(t.ename) = initcap('Scott');
trunc 截断数字和日期
1、TRUNC 函数用于对值进行截断,通常用于截断数字和日期
2、格式:TRUNC(suorce, length),source 表示被截断的数字,length 表示保留小数位数,或者是日期的格式项 yyyy,mm,dd hh,hh24,mi,ss 。
3、trunc 截断小数时不会四舍五入。
4、length 为空时,默认截断所有小数位,为负数时表示截取整数,截断的整数用0替代。
5、length 为空时,默认截断日期的年月日,舍弃时分秒。
截断数字示例:
select trunc(3.14159) from dual;--3
select trunc(3.14159,0) from dual;--3
select trunc(3.14159,1) from dual;--3.1
select trunc(3.14159,3) from dual;--3.141
select trunc(314159.67767,-3) from dual;--截取整数 314000
select ename,job,trunc(sal,0) from emp;--对薪资进行取整.截断是没有四舍五入的
截断日期示例:
select sysdate,trunc(sysdate,'yyyy') from dual;-- 截取到年:2021/9/5 16:48:05 2021/1/1
select sysdate,trunc(sysdate,'mm') from dual;-- 截取到月:2021/9/5 16:48:05 2021/9/1
select sysdate,trunc(sysdate,'dd') from dual;-- 截取到天:2021/9/5 16:48:05 2021/9/5
select sysdate,trunc(sysdate,'hh24') from dual;-- 截取到时:2021/9/5 16:48:05 2021/9/5 16:00:00
select sysdate,trunc(sysdate,'mi') from dual;-- 截取到分:2021/9/5 16:48:05 2021/9/5 16:48:00
select sysdate,trunc(add_months(sysdate,-1),'mm') from dual;-- 获取上月第一天 2021/9/5 16:48:05 2021/8/1
select sysdate,trunc(sysdate) from dual;-- 获取今天的日期:2021/9/5 16:48:05 2021/9/5
select sysdate,trunc(sysdate,'d') from dual;-- 获取当前星期的第一天(星期天) 2021/9/5 16:48:05 2021/9/5
在Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表了。它的主要功能就是彻底删除数据,使其不能进行回滚。这里我打个比方大家就立刻能明了它的作用。大家众所周知,当我们在自己的PC(person computer)上删除某一个文件,它并没有彻底删除而是进入了回收站,你...
为了做备份,需要将服务器上的11g的用户的完整数据导出来。机器上的客户端是oracle10g的。用命令:exp ***/***@*** file=****.dmp为了做备份,需要将服务器上的11g的用户的完整数据导出来。机器上的客户端是Oracle10g的。用命令:exp ***/***@*** file=****.dmp full=y执行后,系统提示:EXP-00008:遇到ORACLE错误14...
截断所有的数据 ,如果截断的是主表,结构不能存在外键关联,截断数据同时从结构上检查
--truncate 与 delete 的区别
--共同点: 都能作为删除数据
--不同点:
-- 1. truncate是DDL,有关表结构,不会开启事务,不能回滚
-- delete是DML,执行会开启事务,可以回滚
-- 2. truncate 截断所有的数据,即删除一张表的所有数据
-- delete 可以删除全部 或者 部分
1. 区别: '截断(删除)的位置不同、指定字符个数不同'
(1) trim() :截断 '左、右' 两边出现的任何指定字符,最多只能指定 '一个字符'
(2) ltrim():截断 '左' 边出现的任何指定字符,可指定 '多个字符'
(3) rtrim():截断 '右' 边出现的任何指定字符,可指定 '多个字符'
-- 若无给定字符,默认 '空格'
2. 不足:'无法截断(删除)中间位置的字符',可通过其它替代方案
在本教程中,您将学习如何使用Oracle TRUNCATE TABLE语句更快更有效地从表中删除所有数据(也叫截断表)。Oracle TRUNCATE TABLE语句简介如果要从表中删除所有数据,可以使用不带WHERE子句的DELETE语句,如下所示:DELETE FROM table_name;对于有少量行记录的表,DELETE语句做得很好。 但是,当拥有大量行记录的表时,使用DELETE语句删...
Oracle查询结果表中,我们想将包含特定字符串的某字段转换为其他字符串进行显示,其作用类似于代码中常见的条件分支语句case when。其实,Oracle中也有相应的条件分支case when语法,结合字符串判断语方法instr,即可达到相应目的。
如下示例:
select t.id,t.f_flowtaskid,t.f_name,
日期转换为字符串:"TO_CHAR" (SYSDATE, 'yyyy-MM-dd')
字符串转换为日期:TO_DATE (str,'yyyy-mm-dd hh24:mi:ss')
但是这里有个要求str 的格式是要 2020-01-01 00:00:00的,斜杆 / 这种是不可以的
如果str长度到日 比如:'2020-01-01' ,是不能转换为 yyyy-mm的 只能转换不能截取,这里和mysql不同。如果想要到月为止,就只能在通过substring截取。
格式1解释 :instr(源字符串, 目标字符串)
格式2:instr( string1, string2, start_position, nth_appearance)
格式2解释:instr(源字符串, 目标字符串, 起始位置, 匹配序号)
格式1实例
select instr('helloworld','l') from table
--返回结果:3 默认第...
1:整数到时间的转换:create or replace function inttotime(in_number NUMBER) return date is begin return(TO_DATE('19700101','yyyymmdd') + in_number/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24)...