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

SQL与数据库笔记

SQL与数据库

达梦数据库常用函数

数据处理函数

FLOOR(n) 求小于或等于数值 n 的最大整数
NVL(n1,n2) 返回第一个非空的值

查表译码函数

语法:DECODE(exp, search1, result1, … searchn, resultn[,default])
例:SELECT DECODE(1, 1, ‘A’, 2, ‘B’);

自定义排序规则

order by (case when flags=‘是’ then 0 when flags=‘否’ then 1 else 2 end),groupid,SORT

给字段和表加注释

comment on column 表名.字段名 is ‘注释内容’;
comment on table 表名 is ‘注释内容’;

表字段自增

IDENTITY(1,1):从1开始,每次增加1

函数 SIGN

语法:SIGN(n)
功能:如果 n 为正数,SIGN(n)返回 1,如果 n 为负数,SIGN(n)返回-1,如果 n 为
0,SIGN(n)返回 0。

字符串替换函数

to_number(replace(dydj,‘kV’,‘’))>=220

日期转字符串

TO_CHAR(SYSDATE,‘YYYY/MM/DD’)
TO_CHAR(SYSDATE,‘YYYY-MM-DD’)

修改自增列的值

select * from T_REP_JXJH_MONTH_JHJG

insert into T_REP_JXJH_MONTH_JHJG(REPMONTH,OBJ_ID,JHJG,JHJY,BY1,BY2,BY3) values(‘2023-11-01’,‘001’,‘测试11’,‘’,‘’,‘’,‘’);
insert into T_REP_JXJH_MONTH_JHJG(REPMONTH,OBJ_ID,JHJG,JHJY,BY1,BY2,BY3) values(‘2023-11-01’,‘002’,‘测试22’,‘’,‘’,‘’,‘’);
insert into T_REP_JXJH_MONTH_JHJG(REPMONTH,OBJ_ID,JHJG,JHJY,BY1,BY2,BY3) values(‘2023-11-01’,‘00112323’,‘测试q2323we’,‘’,‘’,‘’,‘’);

SELECT IDENT_CURRENT(‘T_REP_JXJH_MONTH_JHJG’); – 当前序列值
SELECT IDENT_SEED(‘T_REP_JXJH_MONTH_JHJG’); – 查询序列初始值
SELECT IDENT_INCR(‘T_REP_JXJH_MONTH_JHJG’); – 查询序列增量

delete from T_REP_JXJH_MONTH_JHJG where id=4

SET IDENTITY_INSERT T_REP_JXJH_MONTH_JHJG ON; – 打开手动插入自增列的值
insert into T_REP_JXJH_MONTH_JHJG(id,REPMONTH,OBJ_ID,JHJG,JHJY,BY1,BY2,BY3) values(10,‘2023-11-01’,‘003444’,‘测试3334344’,‘’,‘’,‘’,‘’); – 打开后插入需要指定列名
SET IDENTITY_INSERT T_REP_JXJH_MONTH_JHJG OFF; – 关闭手动插入自增列的值

常用SQL

@run D:\数据库数据\2023年12月4日\XBQCTC_T_BAS_POWERPLANT.sql
@run D:\数据库数据\2023年12月4日\XBQCTC_T_BAS_POWERPLANT_INFO.sql
@run D:\数据库数据\2023年12月4日\XBQCTC_T_BAS_UNIT.sql
@run D:\数据库数据\2023年12月4日\XBQCTC_T_BAS_UNIT_INFO.sql

字符串转数字

TO_NUMBER (char [,fmt]) 将 CHAR、VARCHAR、VARCHAR2 等类型的字符串转换
为 DECIMAL 类型的数值

数字保留小数位

TRUNC(n[,m]) 截取数值函数

达梦7数据库函数表

表 8.1 数值函数

序号 函数名 功能简要说明
01 ABS(n) 求数值 n 的绝对值
02 ACOS(n) 求数值 n 的反余弦值
03 ASIN(n) 求数值 n 的反正弦值
04 ATAN(n) 求数值 n 的反正切值
05 ATAN2(n1,n2) 求数值 n1/n2 的反正切值
06 CEIL(n) 求大于或等于数值 n 的最小整数
07 CEILING(n) 求大于或等于数值 n 的最小整数,等价于 CEIL(n)
08 COS(n) 求数值 n 的余弦值
09 COSH(n) 求数值 n 的双曲余弦值
10 COT(n) 求数值 n 的余切值
11 DEGREES(n) 求弧度 n 对应的角度值
12 EXP(n) 求数值 n 的自然指数
13 FLOOR(n) 求小于或等于数值 n 的最大整数
14 GREATEST(n1,n2,n3) 求 n1、n2 和 n3 三个数中最大的一个
15 GREAT (n1,n2) 求 n1、n2 两个数中最大的一个
16 LEAST(n1,n2,n3) 求 n1、n2 和 n3 三个数中最小的一个
17 LN(n) 求数值 n 的自然对数
18 LOG(n1[,n2]) 求数值 n2 以 n1 为底数的对数
19 LOG10(n) 求数值 n 以 10 为底的对数
20 MOD(m,n) 求数值 m 被数值 n 除的余数
21 PI() 得到常数 π
22 POWER(n1,n2) 求数值 n2 以 n1 为基数的指数
23 RADIANS(n) 求角度 n 对应的弧度值
24 RAND([n]) 求一个 0 到 1 之间的随机浮点数
25 ROUND(n[,m]) 求四舍五入值函数
26 SIGN(n) 判断数值的数学符号
27 SIN(n) 求数值 n 的正弦值
28 SINH(n) 求数值 n 的双曲正弦值
29 SQRT(n) 求数值 n 的平方根
30 TAN(n) 求数值 n 的正切值
31 TANH(n) 求数值 n 的双曲正切值
32 TO_NUMBER (char [,fmt]) 将 CHAR、VARCHAR、VARCHAR2 等类型的字符串转换为 DECIMAL 类型的数值
33 TRUNC(n[,m]) 截取数值函数
34 TRUNCATE(n[,m]) 截取数值函数,等价于 TRUNC(n[,m])
35 TO_CHAR(n [, fmt [, ‘nls’ ] ]) 将数值类型的数据转换为 VARCHAR 类型输出
36 BITAND(n1, n2) 求两个数值型数值按位进行 AND 运算的结果

表 8.2 字符串函数

序号 函数名 功能简要说明
01 ASCII(char) 返回字符对应的整数
02 ASCIISTR(char) 将字符串 char 中,非 ASCII 的字符转成\XXXX(UTF-16)格式,ASCII 字符保持不变
03 BIT_LENGTH(char) 求字符串的位长度
04 CHAR(n) 返回整数 n 对应的字符
05 CHAR_LENGTH(char)/CHARACTER_LENGTH(char) 求字符串的串长度
06 CHR(n) 返回整数 n 对应的字符,等价于 CHAR(n)
07 CONCAT(char1,char2,char3,…) 顺序联结多个字符串成为一个字符串
08 DIFFERENCE(char1,char2) 比较两个字符串的 SOUNDEX 值之差异,返回两个SOUNDEX 值串同一位置出现相同字符的个数。
09 INITCAP(char) 将字符串中单词的首字符转换成大写的字符
10 INS(char1,begin,n,char2) 删除在字符串 char1 中以 begin 参数所指位置开始的n 个字符, 再把 char2 插入到 char1 串的 begin 所指位置
11 INSERT(char1,n1,n2,char2)/INSSTR(char1,n1,n2,char2) 将字符串 char1 从 n1 的位置开始删除 n2 个字符,并将 char2 插入到 char1 中 n1 的位置
12 INSTR(char1,char2[,n,[m]]) 从输入字符串 char1 的第 n 个字符开始查找字符串char2 的第 m 次出现的位置,以字符计算
13 INSTRB(char1,char2[,n,[m]])从 char1 的第 n 个字节开始查找字符串 char2 的第 m次出现的位置,以字节计算
14 LCASE(char) 将大写的字符串转换为小写的字符串
15 LEFT(char,n)/LEFTSTR(char,n) 返回字符串最左边的 n 个字符组成的字符串
16 LEN(char) 返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
17 LENGTH(char) 返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中包含尾随空格
18 OCTET_LENGTH(char) 返回输入字符串的字节数
19 COPYB(DEST_LOB,SRC_LOB,LEN[,DOFFSET[,SOFFSET]]) 拷贝指定长度的源 BLOB 数据插入到目标 BLOB
20 LOCATE(char1,char2[,n]) 返回 char1 在 char2 中首次出现的位置
21 LOWER(char) 将大写的字符串转换为小写的字符串
22 LPAD(char1,n,char2) 在输入字符串的左边填充上 char2 指定的字符,将其拉伸至 n 个字节长度
23 LTRIM(char1,char2) 从输入字符串中删除所有的前导字符,这些前导字符由char2 来定义
24 POSITION(char1,/ IN char2) 求串 1 在串 2 中第一次出现的位置
25 REPEAT(char,n)/REPEATSTR(char,n) 返回将字符串重复 n 次形成的字符串
26 REPLACE(STR, search [,replacement] ) 将输入字符串 STR 中所有出现的字符串 search 都替换成字符串 replace ,其中 STR 为 char、clob 或text 类型
27 REPLICATE(char,times) 把字符串 char 自己复制 times 份
28 REVERSE(char) 将字符串反序
29 RIGHT / RIGHTSTR(char,n) 返回字符串最右边 n 个字符组成的字符串
30 RPAD(char1,n,char2) 类似 LPAD 函数,只是向右拉伸该字符串使之达到 n 个字节长度
31 RTRIM(char1,char2) 从输入字符串的右端开始删除 char2 参数中的字符
32 SOUNDEX(char) 返回一个表示字符串发音的字符串
33 SPACE(n) 返回一个包含 n 个空格的字符串
34 STRPOSDEC(char) 把字符串 char 中最后一个字符的值减一
35 STRPOSDEC(char,pos) 把字符串 char 中指定位置 pos 上的字符值减一
36 STRPOSINC(char) 把字符串 char 中最后一个字符的值加一
37 STRPOSINC(char,pos) 把字符串 char 中指定位置 pos 上的字符值加一
38 STUFF(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的n 个字符, 再把 char2 插入到 char1 串的 begin 所指位置
39 SUBSTR(char,m,n) / SUBSTRING(char FROM m [FOR n])返回 char 中从字符位置 m 开始的 n 个字符
40 SUBSTRB(char,n,m) SUBSTR 函数等价的单字节形式
41 TO_CHAR(character) 将 VARCHAR、CLOB、TEXT 类型的数据转化为 VARCHAR类型输出
42 TRANSLATE(char,from,to) 将所有出现在搜索字符集中的字符转换成字符集中的相应字符
43 TRIM([LEADING|TRAILING|BOTH] [exp] [] FROM char2]) 删去字符串 char2 中由串 char1 指定的字符
44 UCASE(char) 将小写的字符串转换为大写的字符串
45 UPPER(char) 将小写的字符串转换为大写的字符串
46 REGEXP 根据符合 POSIX 标准的正则表达式进行字符串匹配
47 OVERLAY(char1 PLACING char2 FROM int [FOR int])字符串覆盖函数,用 char2 覆盖 char1 中指定的子串,返回修改后的 char1
48 TEXT_EQUAL 返回两个 LONGVARCHAR 类型的值的比较结果,相同返回 1,否则返回 0
49 BLOB_EQUAL 返回两个 LONGVARBINARY 类型的值的比较结果,相同返回 1,否则返回 0
50 NLSSORT 返回对汉字排序的编码
51 GREATEST(char 1, char 2, char 3) 求 char 1、char 2 和 char 3 中最大的字符串
52 GREAT (char 1, char 2) 求 char 1、char 2 中最大的字符串
53 to_single_byte (char) 将多字节形式的字符(串)转换为对应的单字节形式
54 to_multi_byte (char) 将单字节形式的字符(串)转换为对应的多字节形式
55 EMPTY_CLOB () 初始化 clob 字段
56 EMPTY_BLOB () 初始化 blob 字段
57 UNISTR (char) 将字符串 char 中,ascii 码(‘\XXXX’4 个 16 进制字符格式)转成本地字符。对于其他字符保持不变。

表 8.3 日期时间函数

序号 函数名 功能简要说明
01 ADD_DAYS(date,n) 返回日期加上 n 天后的新日期
02 ADD_MONTHS(date,n) 在输入日期上加上指定的几个月返回一个新日期
03 ADD_WEEKS(date,n) 返回日期加上 n 个星期后的新日期
04 CURDATE() 返回系统当前日期
05 CURTIME(n) 返回系统当前时间
06 CURRENT_DATE() 返回系统当前日期
07 CURRENT_TIME(n) 返回系统当前时间
08 CURRENT_TIMESTAMP(n) 返回系统当前带会话时区信息的时间戳
09 DATEADD(datepart,n,date) 向指定的日期加上一段时间
10 DATEDIFF(datepart,date1,date2) 返回跨两个指定日期的日期和时间边界数
11 DATEPART(datepart,date) 返回代表日期的指定部分的整数
12 DAYNAME(date) 返回日期的星期名称
13 DAYOFMONTH(date) 返回日期为所在月份中的第几天
14 DAYOFWEEK(date) 返回日期为所在星期中的第几天
15 DAYOFYEAR(date) 返回日期为所在年中的第几天
16 DAYS_BETWEEN(date1,date2) 返回两个日期之间的天数
17 EXTRACT(时间字段 FROM date) 抽取日期时间或时间间隔类型中某一个字段的值
18 GETDATE(n) 返回系统当前时间戳
19 GREATEST(n1,n2,n3) 求 n1、n2 和 n3 中的最大日期
20 GREAT (n1,n2) 求 n1、n2 中的最大日期
21 HOUR(time) 返回时间中的小时分量
22 LAST_DAY(date) 返回输入日期所在月份最后一天的日期
23 LEAST(n1,n2,n3) 求 n1、n2 和 n3 中的最小日期
24 MINUTE(time) 返回时间中的分钟分量
25 MONTH(date) 返回日期中的月份分量
26 MONTHNAME(date) 返回日期中月分量的名称
27 MONTHS_BETWEEN(date1,date2) 返回两个日期之间的月份数
28 NEXT_DAY(date1,char2) 返回输入日期指定若干天后的日期
29 NOW(n) 返回系统当前时间戳
30 QUARTER(date) 返回日期在所处年中的季节数
31 SECOND(time) 返回时间中的秒分量
32 ROUND (date1[, fmt]) 把日期四舍五入到最接近格式元素指定的形式
33 TIMESTAMPADD(interval,n,timestamp) 返回时间 timestamp 加上 n 个 interval 类型时间间隔的结果
34 TIMESTAMPDIFF(interval,timeStamp1,timestamp2) 返回一个表明 timestamp2 与 timestamp1 之间的interval 类型时间间隔的整数
35 SYSDATE() 返回系统的当前日期
36 TO_DATE(CHAR[,fmt])/TO_TIMESTAMP(CHAR[,fmt]) 字符串转换为日期时间数据类型
37 FROM_TZ(timestamp,timezone|tz_name]) 将时间戳类型 timestamp 和时区类型 timezone(或时区名称 tz_name )转化为 timestamp with timezone 类型
38 TRUNC(date[,fmt]) 把日期截断到最接近格式元素指定的形式
39 WEEK(date) 返回日期为所在年中的第几周
40 WEEKDAY(date) 返回当前日期的星期值
41 WEEKS_BETWEEN(date1,date2) 返回两个日期之间相差周数
42 YEAR(date) 返回日期的年分量
43 YEARS_BETWEEN(date1,date2) 返回两个日期之间相差年数
44 LOCALTIME(n) 返回系统当前时间
45 LOCALTIMESTAMP(n) 返回系统当前时间戳
46 OVERLAPS 返回两两时间段是否存在重叠
47 TO_CHAR(date[,fmt]) 将日期数据类型 DATE 转换为一个在日期语法 fmt 中指定语法的 VARCHAR 类型字符串。
48 SYSTIMESTAMP(n) 返回系统当前带数据库时区信息的时间戳
49 NUMTODSINTERVAL(dec,interval_unit) 转换一个指定的 DEC 类型到 INTERVAL DAY TO SECOND
50 NUMTOYMNTERVAL(dec,interval_unit) 转换一个指定的 DEC 类型值到 INTERVAL YEAR TO MONTH
51 WEEK(date, mode) 根据指定的 mode 计算日期为年中的第几周

表 8.4 空值判断函数
序号 函数名 功能简要说明
01 COALESCE(n1,n2,…nx) 返回第一个非空的值
02 IFNULL(n1,n2) 当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
03 ISNULL(n1,n2) 当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
04 NULLIF(n1,n2) 如果 n1=n2 返回 NULL,否则返回 n1
05 NVL(n1,n2) 返回第一个非空的值
06 NULL_EQU 返回两个类型相同的值的比较

表 8.5 类型转换函数
序号 函数名 功能简要说明
01 CAST(value AS 类型说明) 将 value 转换为指定的类型
02 CONVERT(类型说明,value) 将 value 转换为指定的类型
03 HEXTORAW(exp) 将 exp 转换为 BLOB 类型
04 RAWTOHEX(exp) 将 exp 转换为 VARCHAR 类型
05 BINTOCHAR(exp) 将 exp 转换为 CHAR
06 TO_BLOB(value) 将 value 转换为 blob

表 8.6 杂类函数
序号 函数名 功能简要说明
01 DECODE(exp, search1, result1, … searchn, resultn [,default]) 查表译码
02 ISDATE(exp) 判断表达式是否为有效的日期
03 ISNUMERIC(exp) 判断表达式是否为有效的数值
04 DM_HASH (exp) 根据给定表达式生成 HASH 值
05 LNNVL(condition) 根据表达式计算结果返回布尔值
06 LENGTHB(value) 返回 value 的字节数

项目笔记

本地数据库密码
ops_dm.database.url=jdbc:dm6://127.0.0.1:12345/XBKH
ops_dm.database.driver=dm6.jdbc.driver.DmDriver
ops_dm.database.username=JXJH
ops_dm.database.password=123456

paimary:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://127.0.0.1:5236/XBQCTCusername: XBQCTCpassword: QCTC.6608
oms:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://127.0.0.1:5236/PI6000username: XBKHpassword: qctc.6608

检修老项目 数据库配置文件 2023年1月18日 备份
##西北网
ops_dm.database.type=pooled–
ops_dm.database.datasource=DataS
#ops_dm.database.url=jdbc:dm://127.0.0.1:12345/XBKH
#ops_dm.database.url=jdbc:dm6://127.0.0.1:12345/XBKH
ops_dm.database.url=jdbc:dm6://192.3.25.15:12345/XBKH
ops_dm.database.driver=dm6.jdbc.driver.DmDriver
ops_dm.database.username=JXJH
ops_dm.database.password=123456
ops_dm.database.maxsize=10
ops_dm.database.minsize=2
ops_dm.indyurl=url

ops_dm_oms.database.type=pooled–
ops_dm_oms.database.datasource=DataS
#ops_dm_oms.database.url=jdbc:dm://127.0.0.1:5236/PI6000
ops_dm_oms.database.url=jdbc:dm://192.3.25.1:12345/OMS
ops_dm_oms.database.driver=dm.jdbc.driver.DmDriver
ops_dm_oms.database.username=XBKH
ops_dm_oms.database.password=qctc.6608
ops_dm_oms.database.maxsize=10
ops_dm_oms.database.minsize=2
ops_dm_oms.indyurl=url

MySQL 事件 定时任务

–查看事件调度器是否开启
show variables like ‘%event_scheduler%’;
–开启/关闭事件调度器
set global event_scheduler = ON;
set global event_scheduler = OFF;
–my.ini 文件修改,重启 Mysql 服务器,永久生效。
event_scheduler = on
–查看事件
show events;
select * from information_schema.events;
–创建事件语法
create
[definer = user]
event
[if not exists]
event_name
on schedule schedule_body
[on completion [not] preserve]
[enable | disable | disable on slave]
[comment ‘comment’]
do event_body;
–创建事件例子
create event if not exists face_sales_data_task1
on schedule every 1 minute
starts ‘2024-01-03 21:17:00’
on completion preserve enable
do
begin
set @user_code = floor(rand()*900000000 + 100000000);-- 随机生成用户编码,
set @order_code = md5(floor(rand()*900000000 + 100000000));-- 根据随机用户编码加密成编码
set @product_name = ELT(CEILING(RAND() * 8) ,‘iPhone 15’,‘iPhone 15 Pro’,‘iPhone 15 Pro Max’,‘Xiaomi 14’,‘Xiaomi 14 Pro’,‘Huawei Mate 60’,‘Huawei Mate 60 Pro’,‘Huawei Mate 60 Pro+’);-- 随机从中选择产品
set @sales_province = ELT(CEILING(RAND() * 34) ,‘河北省’,‘山西省’,‘辽宁省’,‘吉林省’,‘黑龙江省’,‘江苏省’,‘浙江省’,‘安徽省’,‘福建省’,‘江西省’,‘山东省’,‘河南省’,‘湖北省’,‘湖南省’,‘广东省’,‘海南省’,‘四川省’,‘贵州省’,‘云南省’,‘陕西省’,‘甘肃省’,‘青海省’,‘台湾省’,‘内蒙古自治区’,‘广西壮族自治区’,‘西藏自治区’,‘宁夏回族自治区’,‘新疆维吾尔自治区’,‘北京市’,‘上海市’,‘天津市’,‘重庆市’,‘香港特别行政区’,‘澳门特别行政区’);
set @sales_number = floor(rand()*1000);-- 随机生成销量
select @user_code,@order_code,@product_name,@sales_province,@sales_number;-- 查看生成的数据
insert into sql_test1.face_sales_data(sales_date, order_code, user_code, product_name, sales_province, sales_number)
values (curdate(),@order_code,@user_code,@product_name,@sales_province,@sales_number);-- 数据录入
end;
–删除事件
drop event [if exists] event_name;
–启动与关闭事件
alter event event_name enable;
alter event event_name disable;

数据库优化

优化目标

  1. 减少查询相应时间
  2. 减少系统资源消耗
  3. 减少数据库负载
  4. 避免锁和死锁
  5. 提高并发能力

常用的数据库优化方式

  1. 索引优化:创建合适的索、使用覆盖索引
  2. 查询优化:优化查询语句,避免不必要的子查询和联合查询、减少数据传输量,只选择必要的列,避免select *、使用内联姐代替子查询
  3. 表结构优化:避免使用大字段
  4. 配置优化:根据实际场景调整数据库连接的配置参数,如连接池大小、并发连接数等
  5. 性能分析和监控:使用explain分析查询计划、监控系统性能
  6. 缓存策略:使用查询缓存、考虑应用层缓存
  7. 分区表和分表:进行分表
  8. 优化复杂查询:重构复杂查询

SQL优化

  1. 选择必要的字段而不是select *
  2. 优化where条件,尽量使用索引,使用合适的操作符,避免不必要的类型转换
  3. 合理使用内连接、外连接、左连接、右连接等,确保连接字段有索引
  4. 限制返回行数
  5. 避免子查询和临时表
  6. 使用exists替代in

Oracle数据库

使用管理员连接数据库

在终端命令行中执行

sqlplus sys as sysdba

输入密码后即可,本机管理密码:Qctc.6608

创建用户

CREATE USER username IDENTIFIED BY password;
CREATE USER gzddjh IDENTIFIED BY "gzddjh@123"

修改密码

alter user gzddjh identified by "gzddjh.123"

用户登录授权

grant create session,resource to gzddjh

查看已有的实例

select INSTANCE_NAME from v$instance;

数据类型

在 Oracle 数据库中,创建表时可以使用以下数据类型:

  1. CHAR:固定长度的字符串,最大长度为 2000 字节。
  2. VARCHAR2:可变长度的字符串,最大长度为 4000 字节。
  3. NCHAR:固定长度的 Unicode 字符串,最大长度为 2000 字节。
  4. NVARCHAR2:可变长度的 Unicode 字符串,最大长度为 4000 字节。
  5. NUMBER:数字类型,可以存储整数或浮点数。
  6. FLOAT:浮点数类型,可以存储双精度浮点数。
  7. BINARY_FLOAT:单精度浮点数类型。
  8. BINARY_DOUBLE:双精度浮点数类型。
  9. DATE:日期类型,可以存储日期和时间。
  10. TIMESTAMP:时间戳类型,可以存储日期和时间,包括秒的小数部分。
  11. TIMESTAMP WITH TIME ZONE:带时区的时间戳类型。
  12. TIMESTAMP WITH LOCAL TIME ZONE:本地时区的时间戳类型。
  13. CLOB:字符大对象类型,可以存储大量文本数据。
  14. NCLOB:Unicode 字符大对象类型,可以存储大量文本数据。
  15. BLOB:二进制大对象类型,可以存储大量二进制数据。
  16. BFILE:外部二进制文件类型,可以存储指向外部文件的引用。
  17. RAW:原始二进制数据类型,可以存储固定长度的二进制数据。
  18. LONG:可变长度的字符数据类型,最大长度为 2GB。
  19. LONG RAW:可变长度的二进制数据类型,最大长度为 2GB。
  20. ROWID:行标识符类型,可以存储行的物理地址。
  21. UROWID:通用行标识符类型,可以存储行的物理地址。

以上是 Oracle 数据库中常用的数据类型,你可以根据自己的需求选择适合的数据类型。

关于VARCHAR2

在Oracle数据库中,‌VARCHAR2和VARCHAR的主要区别如下‌:

  1. 存储空间‌:
    • VARCHAR:在Oracle 7及以下版本中,VARCHAR类型的长度是固定的,如果存储的数据长度小于定义的长度,它会在右侧填充空格。在Oracle 8及以上版本中,VARCHAR类型的长度可以动态变化,但与VARCHAR2相同。‌1
    • VARCHAR2:是一种变长字符串类型,可以存储任意长度的字符串,只会使用实际需要的空间,不会在右侧填充空格。
  2. 默认长度‌:
    • VARCHAR:在Oracle 7及以下版本中,默认长度为1,而在Oracle 8及以上版本中,默认长度为4000。
    • VARCHAR2:默认长度为1。
  3. 是否允许空值‌:
    • VARCHAR:不允许存储NULL值。
    • VARCHAR2:允许存储NULL值。

使用建议‌:
由于VARCHAR类型已经被弃用,建议使用VARCHAR2类型来存储字符串数据。VARCHAR2类型具有更好的灵活性和兼容性,能够存储任意长度的字符串,并且允许存储NULL值,更适合现代数据库应用的需求。‌

设置主键自增-简单

在 Oracle 数据库中,可以使用序列(Sequence)来实现主键自增。以下是一个示例:

1. 创建序列

首先,需要创建一个序列。例如,可以创建一个名为 user_seq 的序列:

CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1;

这个序列将从 1 开始,每次递增 1。

2. 创建表

然后,可以在创建表时使用这个序列来生成主键。例如,可以创建一个名为 users 的表:

CREATE TABLE users (id NUMBER PRIMARY KEY,name VARCHAR2(50),email VARCHAR2(50)
);
3. 插入数据

在插入数据时,可以使用 user_seq.NEXTVAL 来生成主键。例如:

INSERT INTO users (id, name, email) VALUES (user_seq.NEXTVAL, 'John', 'john@example.com');

这个语句会插入一条新的记录,主键的值由 user_seq.NEXTVAL 生成。

4. 查询数据

查询数据时,可以直接查询表中的数据。例如:

SELECT * FROM users;

这个语句会返回 users 表中的所有记录。

以上是一个简单的示例,你可以根据自己的需求进行修改和扩展。

设置主键自增

新建序列
CREATE SEQUENCE my_sequence
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
NOCACHE;
创建表
CREATE TABLE my_table (id NUMBER PRIMARY KEY,name VARCHAR2(50)
);
创建触发器
CREATE OR REPLACE TRIGGER my_table_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGINIF :new.id IS NULL THENSELECT my_sequence.NEXTVAL INTO :new.id FROM dual;END IF;
END;
解释:
  • 序列(SEQUENCE: my_sequence 用于生成自增的唯一数字。
  • 触发器(TRIGGER: my_table_trigger 在插入记录时自动设置 id 字段为序列中的下一个值。
查看触发器
SELECT * FROM user_triggers

设置两个主键

在Oracle数据库中,您可以在创建表时将两个字段一起设置为主键,如下所示:

CREATE TABLE example_table (column1 NUMBER,column2 VARCHAR2(50),column3 DATE,CONSTRAINT pk_example PRIMARY KEY (column1, column2)
);

在这个示例中,column1column2一起作为复合主键。CONSTRAINT pk_example是主键约束的名称,可以根据需要进行更改

循环

需要使用SQLPlus执行,不能使用不同客户端执行

BEGINFOR i IN 0..30 LOOPFOR j IN 1..24 LOOPINSERT INTO T_AQYS_CIM_LOADSUM (LOADTYPE, PDATE, LOADNAME, PERIODID, LOADVALUE)VALUES ('nd',TO_DATE('2025-01-01', 'YYYY-MM-DD') + i,'gz',j,123.12);end loop;END LOOP;COMMIT; -- 提交事务,确保数据插入
END;
/

汉字乱码

  1. 检查数据库字符集

    SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
    
  2. 检查客户端字符集

    SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
    
  3. 检查连接字符串中的字符集设置(报错NL Exception was generated)

    jdbc:oracle:thin:@//hostname:port/service_name?useUnicode=true&characterEncoding=UTF-8

常见Oracle数据库误区

  1. 不支持limit关键字,需要在where中使用rownum >= 1替代
  2. 不支持ifnull函数,需要使用nvl()函数替代
  3. 获取系统时间不能使用sysdate(),使用sysdate
  4. 不能insert xx values (),(),(),不能一次插入多条数据
  5. 在mybatis的xml文件中,不要加分号;

分页

        select * from (select PDATE,PLANID,SCENEID,PLANDATE,RESULTID,UNITID,PERIODID,STATE,POWER,PRICESEG,PRICE,AREA,TYPE,ROWNUM as rmfrom (select * from T_DA_OUT_TMP_UNIT_SCHEDULEwhere PDATE=#{plandate} and PLANID=#{planid} and SCENEID=#{sceneid}order by PDATE,PLANID,SCENEID,PLANDATE,RESULTID,UNITID,to_number(PERIODID)) qwhere ROWNUM <= #{pageno} * #{pagesize}) tt where rm > (#{pageno} - 1) * #{pagesize}

CONNECT BY LEVEL

在Oracle中,CONNECT BY LEVEL是一种特殊的子查询,用于生成一系列的数字。它通常与CONNECT BY子句一起使用,以生成一系列的行。

CONNECT BY LEVEL子查询的基本语法如下:

SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= n;

解释:

  • DUAL是一个特殊的表,它只有一个列和一个行,通常用于执行简单的计算或函数调用。
  • LEVEL是一个伪列,它表示当前行的级别,从1开始。
  • CONNECT BY LEVEL <= n表示生成从1到n的数字。

以下是一个示例,它生成从1到10的数字:

SELECT LEVEL
FROM DUAL
CONNECT BY LEVEL <= 10;

输出结果为:

LEVEL
-----
1
2
3
4
5
6
7
8
9
10

您可以将CONNECT BY LEVEL子查询与其他查询结合起来,以生成更复杂的结果集。例如,您可以使用CONNECT BY LEVEL子查询生成日期范围,或者生成一系列的行号。

例子:

SELECT distinct TO_CHAR(BEGINTIME + LEVEL - 1, 'YYYY') AS q1,TO_CHAR(BEGINTIME + LEVEL - 1, 'MM') AS q2,TO_CHAR(BEGINTIME + LEVEL - 1, 'DD') AS q3,EQID as q4,CASEWHEN TRUNC(BEGINTIME + LEVEL - 1) = TRUNC(BEGINTIME) THENTO_NUMBER(TO_CHAR(BEGINTIME, 'HH24')) * 4 + CEIL(TO_NUMBER(TO_CHAR(BEGINTIME, 'MI')) / 15)ELSE0END AS q5,CASEWHEN TRUNC(BEGINTIME + LEVEL - 1) = TRUNC(ENDTIME) THENTO_NUMBER(TO_CHAR(ENDTIME, 'HH24')) * 4 + CEIL(TO_NUMBER(TO_CHAR(ENDTIME, 'MI')) / 15)ELSE96END AS q6,'0' as q7
FROM T_AQYS_DA_REP_EQUIPMENT t1
WHERE t1.BEGINTIME <= TO_DATE('2024-11-10', 'YYYY-MM-DD') AND t1.ENDTIME >= TO_DATE('2024-11-10', 'YYYY-MM-DD') AND t1.EQTYPE = '1'
CONNECT BY LEVEL <= (TRUNC(ENDTIME) - TRUNC(BEGINTIME)) + 1
ORDER BY q1, q2, q3, q4, q5, q6

LISTAGG

在 Oracle 数据库中,LISTAGG 是一个用于将多个行的值聚合成一个单一字符串的聚合函数。它常用于将查询结果中的某一列的多个值连接成一个以分隔符分隔的字符串。
基本语法:

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
  • expression:你想要聚合的列。
  • delimiter:用来分隔各个值的分隔符(可以是逗号、空格、特定字符等)。
  • ORDER BY column:指定结果的排序顺序,通常是你希望以哪个列的顺序来合并字符串。

示例 1:基本用法
假设有一个表 employees,其中有 department_id 和 employee_name 列,你想要按部门将所有员工的名字连接成一个以逗号分隔的字符串。

SELECT department_id,LISTAGG(employee_name, ', ') WITHIN GROUP (ORDER BY employee_name) AS employee_names
FROM employees
GROUP BY department_id;

解释:

  • LISTAGG(employee_name, ', '):将 employee_name 列的所有值连接成一个字符串,值之间用 ,(逗号加空格)分隔。

  • WITHIN GROUP (ORDER BY employee_name):确保按照 employee_name 的字母顺序进行排序。

  • GROUP BY department_id:按 department_id 分组,每个部门生成一个聚合结果。

假设数据:

departmentidemployeename
10John
10Alice
10Bob
20Jane
20Tom

查询结果:

departmentidemployeenames
10Alice, Bob, John
20Jane, Tom

示例 2:使用其他分隔符
如果你希望将结果连接成以分号分隔的字符串,可以将分隔符改为分号:

SELECT department_id, LISTAGG(employee_name, '; ') WITHIN GROUP (ORDER BY employee_name) AS employee_names
FROM employees
GROUP BY department_id;

查询结果:

departmentidemployeenames
10Alice; Bob; John
20Jane; Tom

示例 3:使用 DISTINCT 去重
LISTAGG 可以和 DISTINCT 一起使用,以确保聚合后的值不重复。例如,如果你想按部门获取不重复的员工名称:

SELECT department_id, LISTAGG(DISTINCT employee_name, ', ') WITHIN GROUP (ORDER BY employee_name) AS employee_names
FROM employees
GROUP BY department_id;

示例 4:处理字符串长度限制
LISTAGG 聚合结果的长度有一个限制。如果聚合结果超出了默认的 4000 字符限制,会引发错误。你可以通过 SUBSTR 或其他方式处理此问题。
例如,如果聚合结果超出了 4000 字符,可以将结果截断:

SELECT department_id,SUBSTR(LISTAGG(employee_name, ', ') WITHIN GROUP (ORDER BY employee_name), 1, 4000) AS employee_names
FROM employees
GROUP BY department_id;

示例 5:处理 NULL 值
LISTAGG 会忽略 NULL 值,因此如果某一行的 employee_name 为 NULL,它不会出现在结果中。

SELECT department_id,LISTAGG(employee_name, ', ') WITHIN GROUP (ORDER BY employee_name) AS employee_names
FROM employees
GROUP BY department_id;

示例 6:处理空值和 NULL(如果需要将 NULL 作为特定值显示)
如果你希望将 NULL 值替换为特定的值(例如 Unknown),可以使用 NVL 或 COALESCE 函数。例如:

SELECT department_id,LISTAGG(NVL(employee_name, 'Unknown'), ', ') WITHIN GROUP (ORDER BY employee_name) AS employee_names
FROM employees
GROUP BY department_id;

注意事项:

7.最大长度限制:LISTAGG 函数生成的字符串最长为 4000 字符。如果结果可能超过 4000 字符,会出现错误。可以使用 SUBSTR 来截断或处理较长字符串。
8.NULL 值:LISTAGG 会忽略 NULL 值,如果需要将 NULL 显示为特定值,可以使用 NVL 或 COALESCE。

结论:
LISTAGG 是一个非常强大的 SQL 聚合函数,允许你将多行数据合并为一行字符串,支持自定义分隔符和排序。在处理报表、分析和数据汇总时非常有用。

PARTITION BY

示例SQL

SELECT NODEID,STATIONID,1 / COUNT(*) OVER (PARTITION BY STATIONID) AS ratio
FROM T_AQJY_BASIC_NODE
WHERE PDATE=TO_DATE('2024-11-01', 'YYYY-MM-DD')

常用函数

日期时间

将字符串转换为日期

SELECT TO_DATE('2024-09-24', 'YYYY-MM-DD') AS converted_date FROM dual;

将字符串转换为日期和时间

SELECT TO_DATE('2024-09-24 14:30:00', 'YYYY-MM-DD HH24:MI:SS') AS converted_datetime FROM dual;

DATE类型的数据加上一天,在Oracle中,可以使用DATE数据类型的加法运算符(+)来将日期加上一天

select sysdate+1 from dual

DATE类型加上一个月

SELECT ADD_MONTHS(my_date, 1) FROM dual;

TRUNC函数,TRUNC函数用于截断日期或数字到指定的精度。对于DATE类型的数据,TRUNC函数可以截断日期到指定的日期部分,例如年、月、日

SELECT TRUNC(SYSDATE) FROM DUAL; -- 截断到日期部分,返回当天的日期
SELECT TRUNC(SYSDATE, 'MM') FROM DUAL; -- 截断到月份部分,返回当月的第一天
SELECT TRUNC(SYSDATE, 'YY') FROM DUAL; -- 截断到年份部分,返回当年的第一天

天数之差

EXTRACT(DAY FROM (ta.ENDTIME - sysdate))
字符串

判断null并处理

select NVL(LINEQUIID,'0') from dual

转换为数字

select max(to_number(NVL(LINEQUIID,'0')))+1 from dual

转换为DATE类型

select TO_DATE('2024-11-21', 'YYYY-MM-DD') from dual 

DATE类型转换为字符串

select TO_CHAR(TO_DATE('2024-11-21', 'YYYY-MM-DD'), 'YYYY-MM-DD') from dual 

连接

在Oracle数据库中,你可以使用 || 运算符来连接字符串。以下是一些示例:

连接两个字符串:

SELECT 'Hello' || ' ' || 'World' FROM dual;

连接字符串和列:

SELECT 'The value is: ' || myColumn FROM myTable;

替换字符串

select replace(t1.name,'kV','') from t_bas_code

使用正则表达式替换字符串

select REGEXP_REPLACE('220kV义白Ⅱ回','^([0-9]{3}kV)','') from dual
数字

CEIL函数用于向上取整,即返回大于或等于给定数字的最小整数。

SELECT CEIL(3.14) AS ceiling FROM DUAL;

保留N位小数

SELECT ROUND(123.4567, 2) AS rounded_value FROM dual;

金仓数据库

杂项函数

查询当前时间

SELECT NOW() AS RESULT;

null判断

SELECT ISNULL('2001-01-10', TO_DATE('05 Dec 2000', 'DD Mon YYYY')) AS RESULT1,
ISNULL(NULL, to_date('05 Dec 2000','DD Mon YYYY')) AS RESULT2;

字符串拼接

SELECT CONCAT('ab', 'dad') AS RESULT;

日期时间转字符串

SELECT  TO_CHAR(TIME'13:20:30','HH12:MI:SS') AS RESULT;
SELECT  TO_CHAR(DATE'2005-12-31','YYYY-MM-DD,HH24:MI:SS') AS RESULT;
SELECT  TO_CHAR(DATE'2005-12-31','YYYY-MM-DD HH24:MI:SS') AS RESULT;
SELECT  TO_CHAR(TIMESTAMP '2005-12-31 13:20:30.01','YYYY-mm-dd,HH24:MI:SS:US:MS') AS RESULT;

日期加减

SELECT DATEADD('hour', 1, CAST('2000-1-1' AS TIMESTAMP)) AS RESULT1, DATEADD('day', 1, CAST('2000-1-1' AS DATE)) AS RESULT2;
-- 2000-01-01 01:00:00      2000-01-02
SELECT DATEADD('month', 1, CAST('2000-1-1' AS TIMESTAMP)) AS RESULT1, DATEADD('year', 1, CAST('2000-1-1' AS DATE)) AS RESULT2;
-- 2000-02-01 00:00:00     2001-01-01
SELECT DATEADD('day', 10, CAST('2002-3-1' AS TIMESTAMP)) AS RESULT;
-- 2002-03-11 00:00:00
SELECT DATEADD('HOUR', 10, CAST('2002-3-1' AS DATETIME)) AS RESULT;
-- 2002-03-01 10:00:00

查询出连续7天的日期

SELECT TO_CHAR(SYSDATE + LEVEL - 1, 'YYYY-MM-DD') AS date_str
FROM dual
CONNECT BY LEVEL <= 7;

对数字进行四舍五入

SELECT ROUND(32.19) AS RESULT1, ROUND(32.69) AS RESULT2, ROUND(-32.19) AS RESULT3, ROUND(-32.69) AS RESULT4;
SELECT ROUND(32.197265,-2) AS RESULT1, ROUND(32.197265,-1) AS RESULT2, ROUND(32.197265,0) AS RESULT3, ROUND(32.197265,2) AS RESULT4, ROUND(32.197265,4) AS RESULT5;

达梦8数据库

函数

表8.1 数值函数
序号函数名功能简要说明
01ABS(n)求数值 n 的绝对值
02ACOS(n)求数值 n 的反余弦值
03ASIN(n)求数值 n 的反正弦值
04ATAN(n)求数值 n 的反正切值
05ATAN2(n1,n2)求数值 n1/n2 的反正切值
06CEIL(n)求大于或等于数值 n 的最小整数
07CEILING(n)求大于或等于数值 n 的最小整数,等价于 CEIL(n)
08COS(n)求数值 n 的余弦值
09COSH(n)求数值 n 的双曲余弦值
10COT(n)求数值 n 的余切值
11DEGREES(n)求弧度 n 对应的角度值
12EXP(n)求数值 n 的自然指数
13FLOOR(n)求小于或等于数值 n 的最大整数
14GREATEST(n {,n})求一个或多个数中最大的一个
15GREAT (n1,n2)求 n1、n2 两个数中最大的一个
16LEAST(n {,n})求一个或多个数中最小的一个
17LN(n)求数值 n 的自然对数
18LOG(n1[,n2])求数值 n2 以 n1 为底数的对数
19LOG10(n)求数值 n 以 10 为底的对数
20MOD(m,n)求数值 m 被数值 n 除的余数
21PI()得到常数 π
22POWER(n1,n2)/POWER2(n1,n2)求数值 n2 以 n1 为基数的指数
23RADIANS(n)求角度 n 对应的弧度值
24RAND([n])求一个 0 到 1 之间的随机浮点数
25ROUND(n[,m[,trunc_flag]])求四舍五入值或直接进行截断后的值
26SIGN(n)判断数值的数学符号
27SIN(n)求数值 n 的正弦值
28SINH(n)求数值 n 的双曲正弦值
29SQRT(n)求数值 n 的平方根
30TAN(n)求数值 n 的正切值
31TANH(n)求数值 n 的双曲正切值
32TO_NUMBER(str [,fmt [, ‘nls’]])将 CHAR、VARCHAR、VARCHAR2、CLOB 等类型的字符串转换为 DECIMAL 类型的数值
33TRUNC(n[,m])或 TRUNC(str,[,m])截取数值函数,str 内只能为数字和’-‘、’+‘、’.'的组合
34TRUNCATE(n[,m])或 TRUNCATE(str,[,m])截取数值函数,等价于 TRUNC 函数
35TO_CHAR(n [, fmt [, ‘nls’ ] ])将数值类型的数据转换为 VARCHAR 类型输出
36BITAND(n1, n2)求两个数值型数值按位进行 AND 运算的结果
37NANVL(n1, n2)当 n1 为 NaN 时返回 n2,否则返回 n1。此函数功能仅能处理浮点数类型,处理其他数据类型时结果为 n1
38REMAINDER(n1, n2)计算 n1 除 n2 的余数,余数取绝对值更小的那一个
39TO_BINARY_FLOAT(n)将 number、real 或 double 类型数值转换成 float 类型
40TO_BINARY_DOUBLE(n)将 number、real 或 float 类型数值转换成 double 类型
41BIN_TO_NUM(n1{,n2})将输入参数表示的二进制数值转换成十进制 number 类型
42FOUND_ROWS()获取查询语句的查询结果在被 <LIMIT 限定条件 > 或 <TOP 子句 > 筛选之前满足条件的总行数
表8.2 字符串函数
序号函数名功能简要说明
01ASCII(char)返回字符对应的整数
02ASCIISTR(char)将字符串 char 中,非 ASCII 的字符转成\XXXX(UTF-16)格式,ASCII 字符保持不变
03BIT_LENGTH(char)求字符串的位长度
04CHAR(n)返回整数 n 对应的字符
05CHAR_LENGTH(char)/ CHARACTER_LENGTH(char)求字符串的串长度
06CHR(n)返回整数 n 对应的字符,等价于 CHAR(n)
07NCHR(n)返回整数 n 对应的字符,等价于 CHAR(n)
08CONCAT(char1,char2,char3,…)顺序联结多个字符串成为一个字符串
09DIFFERENCE(char1,char2)比较两个字符串的 SOUNDEX 值之差异,返回两个 SOUNDEX 值串同一位置出现相同字符的个数。
10INITCAP(char)将字符串中单词的首字符转换成大写的字符
11INS(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符, 再把 char2 插入到 char1 串的 begin 所指位置
12INSERT(char1,n1,n2,char2) / INSSTR(char1,n1,n2,char2)将字符串 char1 从 n1 的位置开始删除 n2 个字符,并将 char2 插入到 char1 中 n1 的位置
13INSTR(str1,str2[,n,[m]])从输入字符串 str1 的第 n 个字符开始查找字符串 str2 的第 m 次出现的位置,以字符计算
14INSTRB(char1,char2[,n,[m]])从 char1 的第 n 个字节开始查找字符串 char2 的第 m 次出现的位置,以字节计算
15INSTRC(char1,char2[,n,[m]])从 char1 的第 n 个字节开始查找字符串 char2 的第 m 次出现的位置,以完整字符计算
16LCASE(char)将大写的字符串转换为小写的字符串
17LEFT(char,n) / LEFTSTR(char,n)返回字符串最左边的 n 个字符组成的字符串
18LEN(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
19LENGTH(str)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
20LENGTHC(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
21LENGTH2(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
22LENGTH4(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
23OCTET_LENGTH(char)返回输入字符串的字节数
24LOCATE(char,str[,n])返回 char 在 str 中首次出现的位置
25LOWER(char)将大写的字符串转换为小写的字符串
26LPAD(char1,n[,char2])在输入字符串的左边填充上 char2 指定的字符,将其拉伸至 n 个字节长度
27LTRIM(str[,set])删除字符串 str 左边起,出现在 set 中的任何字符,当遇到不在 set 中的第一个字符时返回结果
28POSITION(char1 IN char2) / POSITION(char1, char2)求串 1 在串 2 中第一次出现的位置
29REPEAT(char,n) / REPEATSTR(char,n)返回将字符串重复 n 次形成的字符串
30REPLACE(str, search [,replace] )将输入字符串 str 中所有出现的字符串 search 都替换成字符串 replace ,其中 str 为 char、clob 或 text 类型
31REPLICATE(char,times)把字符串 char 自己复制 times 份
32REVERSE(char)将字符串反序
33RIGHT / RIGHTSTR(char,n)返回字符串最右边 n 个字符组成的字符串
34RPAD(char1,n[,char2])类似 LPAD 函数,只是向右拉伸该字符串使之达到 n 个字节长度
35RTRIM(str[,set])删除字符串 str 右边起出现的 set 中的任何字符,当遇到不在 set 中的第一个字符时返回结果
36SOUNDEX(char)返回一个表示字符串发音的字符串
37SPACE(n)返回一个包含 n 个空格的字符串
38STRPOSDEC(char)把字符串 char 中最后一个字节的值减一
39STRPOSDEC(char,pos)把字符串 char 中指定位置 pos 上的字节值减一
40STRPOSINC(char)把字符串 char 中最后一个字节的值加一
41STRPOSINC(char,pos)把字符串 char 中指定位置 pos 上的字节值加一
42STUFF(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符, 再把 char2 插入到 char1 串的 begin 所指位置
43SUBSTR(str[,m[,n]]) / SUBSTRING(char [from m [for n]])返回 char 中从字符位置 m 开始的 n 个字符
44SUBSTRB(char,m[,n])SUBSTR 函数等价的单字节形式
45TO_CHAR(str)将 VARCHAR、CLOB、TEXT 类型的数据转化为 VARCHAR 类型输出
46TRANSLATE(char,char_from,char_to)将所有出现在搜索字符集中的字符转换成字符集中的相应字符
47TRIM([<<LEADING|TRAILING|BOTH> [char] | char> FROM] str)删去字符串 str 中由 char 指定的字符
48UCASE(char)将小写的字符串转换为大写的字符串
49UPPER(char)将小写的字符串转换为大写的字符串
50NLS_UPPER(char1 [,nls_sort=char2])将小写的字符串转换为大写的字符串
51NLS_LOWER(char1 [,nls_sort=char2])将大写的字符串转换为小写的字符串
52REGEXP根据符合 POSIX 标准的正则表达式进行字符串匹配
53OVERLAY(char1 PLACING char2 FROM int [FOR int])字符串覆盖函数,用 char2 覆盖 char1 中指定的子串,返回修改后的 char1
54TEXT_EQUAL(n1,n2)返回两个 LONGVARCHAR 类型的值的比较结果,相同返回 1,否则返回 0
55BLOB_EQUAL(n1,n2)返回两个 LONGVARBINARY 类型的值的比较结果,相同返回 1,否则返回 0
56NLSSORT(char1 [,nls_sort=char2])返回对自然语言排序的编码
57GREATEST(char {,char})求一个或多个字符串中最大的字符串
58GREAT (char1, char2)求 char 1、char 2 中最大的字符串
59to_single_byte (char)将多字节形式的字符(串)转换为对应的单字节形式
60to_multi_byte (char)将单字节形式的字符(串)转换为对应的多字节形式
61EMPTY_CLOB ()初始化 clob 字段
62EMPTY_BLOB ()初始化 blob 字段
63UNISTR (char)将字符串 char 中,ASCII 编码或 Unicode 编码(‘\XXXX’4 个 16 进制字符格式)转成本地字符。对于其他字符保持不变。
64ISNULL(char)判断表达式是否为 NULL
65CONCAT_WS(delim, char1,char2,char3,…)顺序联结多个字符串成为一个字符串,并用 delim 分割
66SUBSTRING_INDEX(char, char_delim, count)按关键字截取字符串,截取到指定分隔符出现指定次数位置之前
67COMPOSE(char)在 UTF8 库下,将 str 以本地编码的形式返回
68FIND_IN_SET(char, charlist[,separator])查询 charlist 中是否包含 char,返回 char 在 charlist 中第一次出现的位置或 NULL
69TRUNC(char1, char2)截取字符串函数
70TO_BASE64®将 VARBINARY、VARCHAR、CLOB 或 BLOB 格式的数据 R 编码成 base64 字符集格式,再以 CLOB 类型返回
71FROM_BASE64®将 VARCHAR 表示的 base64 字符集的编码 R 解码成原始的 VARBINARY 类型数据;或将 CLOB 表示的 base64 字符集的编码 R 解码成原始的 BLOB 类型数据
表8.3 日期时间函数
序号函数名功能简要说明
01ADD_DAYS(date,n)返回日期加上 n 天后的新日期
02ADD_MONTHS(date,n)在输入日期上加上指定的几个月返回一个新日期
03ADD_WEEKS(date,n)返回日期加上 n 个星期后的新日期
04CURDATE()返回客户端当前日期
05CURTIME(n)返回客户端当前时间
06CURRENT_DATE()返回客户端当前日期
07CURRENT_TIME(n)返回客户端当前时间
08CURRENT_TIMESTAMP(n)返回客户端当前带会话时区信息的时间戳
09DATEADD(datepart,n,date)向指定的日期加上一段时间
10DATEDIFF(datepart,date1,date2)返回跨两个指定日期的日期和时间边界数
11DATEPART(datepart,date)返回代表日期的指定部分的整数
12DAY(date)返回日期中的天数
13DAYNAME(date)返回日期的星期名称
14DAYOFMONTH(date)返回日期为所在月份中的第几天
15DAYOFWEEK(date)返回日期为所在星期中的第几天
16DAYOFYEAR(date)返回日期为所在年中的第几天
17DAYS_BETWEEN(date1,date2)返回两个日期之间的天数
18EXTRACT(时间字段 FROM date)抽取日期时间或时间间隔类型中某一个字段的值
19GETDATE(n)返回系统当前时间戳
20GREATEST(date {,date})求一个或多个日期中的最大日期
21GREAT (date1,date2)求 date1、date2 中的最大日期
22HOUR(time)返回时间中的小时分量
23LAST_DAY(date)返回输入日期所在月份最后一天的日期
24LEAST(date {,date})求一个或多个日期中的最小日期
25MINUTE(time)返回时间中的分钟分量
26MONTH(date)返回日期中的月份分量
27MONTHNAME(date)返回日期中月分量的名称
28MONTHS_BETWEEN(date1,date2)返回两个日期之间的月份数
29NEXT_DAY(date1,char2)返回输入日期指定若干天后的日期
30NOW(n)返回系统当前时间戳
31QUARTER(date)返回日期在所处年中的季节数
32SECOND(time)返回时间中的秒分量
33ROUND (date1[, fmt])把日期四舍五入到最接近格式元素指定的形式
34TIMESTAMPADD(datepart,n,timestamp)返回时间戳 timestamp 加上 n 个 datepart 指定的时间段的结果
35TIMESTAMPDIFF(datepart,timeStamp1,timestamp2)返回一个表明 timestamp2 与 timestamp1 之间的指定 datepart 类型时间间隔的整数
36SYSDATE()返回系统当前的日期时间,为数据库服务器所在操作系统的日期时间
37TO_DATE(CHAR[,fmt[,‘nls’]]) /TO_TIMESTAMP(CHAR[,fmt[,‘nls’]]) / TO_TIMESTAMP_TZ(CHAR[,fmt])字符串转换为日期时间数据类型
38FROM_TZ(timestamp,timezone|[tz_name])将时间戳类型 timestamp 和时区类型 timezone(或时区名称 tz_name)转化为 timestamp with timezone 类型
39TZ_OFFSET(timezone| [tz_name])返回给定的时区或时区名和标准时区(UTC)的偏移量
40TRUNC(date[,fmt])把日期截断到最接近格式元素指定的形式
41WEEK(date)返回日期为所在年中的第几周
42WEEKDAY(date)返回当前日期的星期值
43WEEKS_BETWEEN(date1,date2)返回两个日期之间相差周数
44YEAR(date)返回日期的年分量
45YEARS_BETWEEN(date1,date2)返回两个日期之间相差年数
46LOCALTIME(n)返回系统当前时间
47LOCALTIMESTAMP(n)返回系统当前时间戳
48OVERLAPS返回两个时间段是否存在重叠
49TO_CHAR(date[,fmt[,nls]])将日期数据类型 DATE 转换为一个在日期语法 fmt 中指定语法的 VARCHAR 类型字符串。
50SYSTIMESTAMP(n)返回系统当前的时间戳,带有数据库服务器所在操作系统的时区信息
51NUMTODSINTERVAL(dec,interval_unit)转换一个指定的 DEC 类型到 INTERVAL DAY TO SECOND
52NUMTOYMINTERVAL (dec,interval_unit)转换一个指定的 DEC 类型值到 INTERVAL YEAR TO MONTH
53WEEK(date, mode)根据指定的 mode 计算日期为年中的第几周
54UNIX_TIMESTAMP (datetime)返回自标准时区的’1970-01-01 00:00:00 +0:00’的到本地会话时区的指定时间的秒数差
55from_unixtime(unixtime)返回将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的时间戳类型
from_unixtime(unixtime, fmt)将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的指定 fmt 格式的时间串
56SESSIONTIMEZONE返回当前会话的时区
57DBTIMEZONE返回当前数据库的时区
58DATE_FORMAT(d, format)以不同的格式显示日期/时间数据
59TIME_TO_SEC(d)将时间换算成秒
60SEC_TO_TIME(sec)将秒换算成时间
61TO_DAYS(timestamp)转换成公元 0 年 1 月 1 日的天数差
62DATE_ADD(datetime, interval)返回一个日期或时间值加上一个时间间隔的时间值
63DATE_SUB(datetime, interval)返回一个日期或时间值减去一个时间间隔的时间值
64SYS_EXTRACT_UTC(d timestamp)将所给时区信息转换为 UTC 时区信息
65TO_DSINTERVAL(d char)将表示时间间隔的字符串转换为 INTERVAL DAY TO SECOND 类型
66TO_YMINTERVAL(d char)将表示时间间隔的字符串转换为 INTERVAL YEAR TO MONTH 类型
表8.4 空值判断函数
序号函数名功能简要说明
01COALESCE(n1,n2,…nx)返回第一个非空的值
02IFNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
03ISNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
04NULLIF(n1,n2)如果 n1=n2 返回 NULL,否则返回 n1
05NVL(n1,n2)返回第一个非空的值
06NULL_EQU返回两个类型相同的值的比较
表8.5 类型转换函数
序号函数名功能简要说明
01CAST(value AS 类型说明)将 value 转换为指定的类型
02CONVERT(类型说明,value [,style]); CONVERT(char, dest_char_set [,source_char_set ] )用于 INI 参数 ENABLE_CS_CVT=0 时,将 value 转换为指定的类型; 用于 INI 参数 ENABLE_CS_CVT=1 时,将字符串从源串编码格式转换成目的编码格式
03HEXTORAW(exp)将 exp 转换为 BLOB 类型
04RAWTOHEX(exp)将 exp 转换为 VARCHAR 类型
05BINTOCHAR(exp)将 exp 转换为 CHAR 类型
06TO_BLOB(value)将 value 转换为 BLOB 类型
07UNHEX(exp)将十六进制的 exp 转换为格式字符串
08HEX(exp)将字符串的 exp 转换为十六进制字符串
09CHARTOBIN(exp)将 exp 转换为 BINARY 类型
表8.6 杂类函数
序号函数名功能简要说明
01DECODE(exp, search1, result1, … searchn, resultn [,default])查表译码
02ISDATE(exp)判断表达式是否为有效的日期
03ISNUMERIC(exp)判断表达式是否为有效的数值
04DM_HASH (exp)根据给定表达式生成 HASH 值
05LNNVL(condition)根据表达式计算结果返回布尔值
06LENGTHB(value)返回 value 的字节数
07FIELD(value, e1, e2, e3, e4…en)返回 value 在列表 e1, e2, e3, e4…en 中的位置序号,不在输入列表时则返回 0
08ORA_HASH(exp [,max_bucket [,seed_value]])为表达式 exp 生成 HASH 桶值
09IF(expr1,expr2,expr3)判断函数。expr1 为布尔表达式,如果其值为 TRUE,则返回 expr2 值,否则返回 expr3 值
10WIDTH_BUCKET(expr,low_value,high_value,num_buckets)将指定的范围[low_value,high_value)划分为 num_buckets 个等宽的直方图,每个桶的范围都是左闭右开的,返回指定表达式 expr 的值所属的桶序号
11OBJECT_ID([schema_name.]object_name[, object_type])返回对象的 ID
http://www.xdnf.cn/news/20104.html

相关文章:

  • Windows搭建WebDAV+Raidrive,实现磁盘映射
  • CentOS安装或升级protoc
  • 【学习笔记】解决 JWT 解析报错:Claims claims = JwtUtil.parseJWT(...) Error Code 401(token过期)
  • 开讲啦|MBSE公开课:第五集 MBSE中期设想(下)
  • Process Explorer 学习笔记(第三章3.2.4):找出窗口对应的进程
  • Python+DRVT 从外部调用 Revit:批量创建梁
  • PiscCode轨迹跟踪Mediapipe + OpenCV进阶:速度估算
  • VIVADO的IP核 DDS快速使用——生成正弦波,线性调频波
  • 【FastDDS】Discovery ( 04-STATIC Discovery Settings)
  • yolov8环境配置:从安装到卸载,从入门到放弃。
  • std::complex
  • 深入剖析Spring动态代理:揭秘JDK动态代理如何精确路由接口方法调用
  • 实习结束,秋招开启
  • 通过API接口管理企业微信通讯录案例
  • AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变
  • 算法模板(Java版)_DFS与BFS
  • 贵州移动创维E900V22F-S905L3SB-全分区备份
  • 【Linux网络编程】应用层协议-----HTTPS协议
  • C#中IEnumerable 、IAsyncEnumerable、yield
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • 储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 嵌入式第四十六天(51单片机(通信))
  • 2025年你需要了解的大型语言模型部署工具
  • 配置WSL2的Ubuntu接受外部设备访问
  • 课前准备--基因组(WGS/WES)联合单细胞获取突变信息
  • 分析KLA-Tencor公司膜厚THK产品
  • Python 算数运算练习题
  • 应对技术选型与技术债务以及架构设计与业务需求的关系
  • 概率与数理统计公式及结论汇总