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

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

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);
复制代码


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

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
57 0
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
3月前
|
SQL 数据处理 数据库
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
395 0
|
6月前
|
SQL 存储 关系型数据库
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES系列
292 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
47 5
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
47 2
|
6月前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
5月前
|
存储 传感器 时序数据库
时序数据库influx有字符串拼接函数吗
【6月更文挑战第25天】时序数据库influx有字符串拼接函数吗
97 0
下一篇
无影云桌面