sql中常用的一些函数(后续用到新的持续补充)

MYSQL

1、字符串拼接函数

CONCAT、CONCAT_WS、GROUP_CONCAT

语法
concat(str1,str2,...)
例子说明:
SELECT CONCAT('are ', 'you ', ' ok?') AS 'result' FROM DUAL;

语法
CONCAT_WS(separator,str1,str2,...)
语法说明
CONCAT_WS(分隔符,字符1,字符2,...)
例子说明
SELECT CONCAT_WS(' ','but','we',"haven't",'fate') AS 'result' FROM DUAL;
//对分组后的数据,指定某个字段进行拼接,并且可以指定拼接的分隔符和拼接的顺序
语法
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
语法说明:
GROUP_CONCAT([DISTINCT] 字符1,字符2... [ORDER BY 需要排序的字段 [ASC | DESC] ] [SEPARATOR 分隔符])

2、字符串截取函数

left()、right()、substring()、substring_index()、mid()、substr() 等价于 substring() 函数

select left('cs.csdn', 3);
# 从左边开始截取三个字符,结果:cs.
select right('cs.csdn', 3);
# 从左边开始截取三个字符,结果:sdn
//substring(str, pos)、substring(str, pos, len) 索引为负,从右向左查位置

3、聚合函数

聚合函数不能嵌套使用
求平均值 AVG() ,求和SUM() ,求最大值MAX(),求最小值MIN(), 统计一组数据的个数COUNT()
聚合函数一般搭配分组函数group by使用
如果对聚合后的数据还要进行条件筛选,就需要用到having

ORACLE

1、nvl(对应mysql中的ifnull),to_date(对应mysql中的str_to_date),to_char(对应mysql中的date_formate),decode(对应mysql中的if),rownum(对应MySQL中的limit)

nvl (字段1,默认值)
nvl意思是 如果字段1为空,就取默认值,对应mysql中的ifnull函数

2、聚合函数

常用聚合函数
listagg、xmlagg、wm_concat、zh_concat、case when函数

wm_concat
来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000。随着版本的变更返回值类型可能会有改动,项目中使用时候最好在新的用户下创建一个函数。
适用于简单聚合数据
优点:效率高.
缺点:(1)返回最大字符数4000
(2)行数据默认以逗号分隔,可以修改函数更改,但是函数一旦创建不能随意自定义分隔符;
(3)排序实现复杂且效率低;
(4)内部聚合混乱

//使用方法
select id,wm_concat(name) from stu group by id;
//排序方法(其中一种)
select * from (select wm_concat(name) over(partition by class_id order by id) val,

row_number() over(partition by class_id order by id desc) rn,

a.* from stu a) where rn = 1;

zh_concat
该函数是在wm_concat基础上修改返回值类型得到,可以返回clob类型数据,内部实现同wm_concat。优缺点同wm_concat。

listagg
11g新增函数,返回值varchar2,同样受4000字符数限制。但是可以排序,可以指定分隔符。
优点:可排序、可自定义分隔符
缺点:返回最大字符数4k

//使用方法
select class_id,listagg(name,',') within group(order by id) from stu group by class_id

xmlagg
xmlagg函数需要将输入的值转换为xml,处理返回结果也是xml,最后再用getclobval()获取colb类型的结果。

1.xmlagg(xmlparse(content 合并字段 ||,’ wellformed) order by 排序字段).getclobval()

2. xmlagg(xmlelement(e, 合并字段, ',').extract('//text()')).getclobval()


XMLAGG([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

col-list可以是单个字段,也可以是用逗号分割的字段列表
string-expr 计算结果为字符串的sql表达式(通常是要从其中检索数据的列的名称)
%FOREACH(col-list) 可选-列名或者以逗号分割的列名列表。
%AFTERHAVING-可选用在HAVING子句中的条件

当类型为varchar2时,不排序用wm_concat;当排序时候,11g以上用listagg,10g用xmlagg;当类型为clob时,排序用xmlagg,不排序用zh_concat

写法一
case 属性名
when '1' then '是'
else '否' 
end 
写法二
case
when 1=1 then '是'
else '否' 
end 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
列举了SQL语句大部分常用函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar(expression) 转换表达式为字符型态。 CDate(expression) 转换表达式为Date 型态。 CDbl(expression) 转换表达式为Double 型态。 CDec(expression) 转换表达式为Decimal 型态。 CInt(expression) 转换表达式为Integer 型态。 CLng(expression) 转换表达式为Long 型态。 CObj(expression) 转换表达式为Object 型态。 CShort(expression) 转换表达式为Short 型态。 CSng(expression) 转换表达式为Single 型态。 CStr(expression) 转换表达式为String 型态。 Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。 Chr(charcode) 以ASCII 码来取得字符内容。 Close(filenumberlist) 结束使用Open 开启的档案。 Cos(number) 取得一个角度的余弦值。 Ctype(expression, typename) 转换表达式的型态。 DateAdd(dateinterval, number, datetime) 对日期或时间作加减。 DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。 DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。 DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。 DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。 Day(datetime) 依接收的日期参数传回日 ....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值