数据库中一些用到函数记录

简介: 数据库中一些用到函数记录

1.oracle、mysql 字符串拼接



oracle:字符串拼接用||或者CONCAT,最好用||


例如:拼接个in的条件
select '(' || chr(39) || REPLACE('a,b,c,d',',',chr(39) || ',' || chr(39)) || chr(39) || ')' from dual;
复制代码


效果


网络异常,图片无法展示
|


mysql:concat、GROUP_CONCAT

查询 fhx发过消息的用户


SELECT GROUP_CONCAT(DISTINCT cm.CHART_ACCEPT_CODE SEPARATOR ';') FROM CHAT_MSG cm where cm.CHART_CMD='3' and cm.CHART_FROM_CODE='fhx' group by cm.CHART_FROM_CODE;
SEPARATOR 分隔符
复制代码


网络异常,图片无法展示
|


2.oracle 获取最新数据



2.1获取最新数据的方式最基本的方式,一般是按照时间desc 然后通过rownum获取第一条,但是如果需要分组函数的话还是麻烦的

2.2这里用函数 ROW_NUMBER() OVER(PARTITION BY 分组取数列 ORDER BY 排序列 DESC) 可以做到分组排序结果


select rn,bank_acc,bal,avail_bal
  from (select ROW_NUMBER() OVER(PARTITION BY bank_acc ORDER BY bal_date DESC) rn,bank_acc,bal,avail_bal
              from bis_acc_bal)
 where rn = 1
复制代码


网络异常,图片无法展示
|


3.oracle 分组后合并



3.1 wm_concat 可以做到分组后列的合并,在新版的oracle中已经被弃用了(因为我本地用了这个函数,结果测试环境跑不通才发现新版本已经没有了)

3.2 listagg


select listagg (fp.item_name, ',') WITHIN GROUP (ORDER BY fp.item_name) item_name
复制代码


4.oracle 获取连续日期,或数字



SELECT TO_CHAR(SYSDATE - LEVEL + 1, 'YYYY-MM-DD') TODAY
  FROM DUAL
CONNECT BY LEVEL <= 7;
select level from dual connect by level <= 7
复制代码


网络异常,图片无法展示
|


5.mysql 获取连续日期



WITH RECURSIVE cte (TODAY) AS (
 SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY) FROM DUAL
 UNION ALL
 SELECT DATE_ADD(TODAY, INTERVAL 1 DAY) FROM cte
 WHERE TODAY <= DATE_FORMAT(NOW(), '%Y-%m-%d')
) SELECT * FROM cte
复制代码


网络异常,图片无法展示
|


6.oracle in 中带运算符的处理



刚开始的时候我想用字符串拼接和replace处理 in 的但是没效果,如下面的例子


例如 
ID in  select '(' || chr(39) || REPLACE('a,b,c,d',',',chr(39) || ',' || chr(39)) || chr(39) || ')' from dual;
复制代码


没效果

后续采用的方法 REGEXP_SUBSTR


REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
string 是字段
pattern 正则表达是
position 起始位置 默认1
occurrence 标识第几个匹配组,默认为1
modifier i不区分大小写 c区分大小写 默认c
复制代码


SELECT REGEXP_SUBSTR('a,b,c,d', '[^,]+', 1, rownum)
  from dual
connect by rownum <= LENGTH('a,b,c,d') -
           LENGTH(regexp_replace('a,b,c,d', ',', '')) + 1;
1是开始的位置,如果不写 connect by rownum 默认只有个a        
复制代码


网络异常,图片无法展示
|


使用的一个例子


select sc.id,feb.corpids from FILL_EXCEL_BATCH feb
 left join sys_corp sc on sc.id in (SELECT REGEXP_SUBSTR (feb.corpids, '[^,]+', 1,rownum)
           from dual connect by rownum<=LENGTH (feb.corpids) - LENGTH (regexp_replace(feb.corpids, ',', ''))+1);
复制代码


网络异常,图片无法展示
|

相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
46 0
|
3月前
|
SQL 存储 关系型数据库
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
120 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
34 5
|
2月前
|
关系型数据库 MySQL 数据库
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
25 2
|
2月前
|
存储 传感器 时序数据库
时序数据库influx有字符串拼接函数吗
【6月更文挑战第25天】时序数据库influx有字符串拼接函数吗
36 0
|
2月前
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
111 0
|
3月前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
3月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
65 0
|
2月前
|
存储 SQL 关系型数据库
MySQL数据库——存储函数(介绍、案例)
MySQL数据库——存储函数(介绍、案例)
73 0