java开发中常用Oracle函数实例总结比较,当真不少

昨天分享了一篇基础SQL语句,结果大家反应太简单,太基础,太low了,好吧,今天分享常见一点、复杂一点的Oracle函数,其中的例句中有函数套函数,还算中等难度,共同学习,欢迎大家吐槽!

Oracle的函数有多少,心里话,我真不知道,我在银行的开发工作中常用的也就30个左右,听说有一百多个,这个大家去求证!今天要分享的是Java开发中常用的Oracle函数,包括字符串处理函数、求和函数、数学函数、拼接函数、转换函数、替代函数等,每一个函数给几个例子,方便理解学习。

1、nvl和nvl2函数

nvl函数如果查询的为空值,就显示后面的值,trim为去空格,分化为ltrim()和rtrim();

select user_name,nvl(trim(user_mail),\’为空\’) user_mail from user_table;

select user_name,nvl(ltrim(user_mail),\’为空\’) user_mail from user_table;

2、nvl2函数,如果为空显示第二个参数值,不为空显示第三个参数值,这个函数是nvl()函数的升级,更灵活一些。

select user_name,nvl2(Trim(user_mail),\’不为空\’,\’为空\’) user_mail from user_table;

3、case…when的使用,case。。when算是语法,不是函数,因为下面要用到,这里说明一下。这里使用两种方法来写:

a、select user_id,user_name,(case when user_sex=\’1\’ then \’男\’ when user_sex= \’2\’ then \’女\’ else user_sex end ) user_sex,user_mail from user_table;

b、select user_id,user_name,(case user_sex when\’1\’ then \’男\’ when \’2\’ then \’女\’ else user_sex end ) user_sex, user_mail from user_table;

4、sum()求和函数和count()求和函数,统计类函数在开发中经常使用,一般和round()配合

现在求男占比和女占比,这种在统计项目中经常使用到,如我现在做到的报表系统,要比这个还要复杂,数据量还要大,而且有时候是三四张表管理、、、

这里有两种写法,一种是使用别名,一种是不使用别名

a、select

count(*) tot_num,sum(case when user_name=\’bakehe\’ then 1 else 0 end) bakehe_num,sum(case when user_name=\’what\’ then 1 else 0 end) what_num,sum(case when user_sex=\’男\’ or user_sex=\’1\’ then 1 else 0 end) 男_num,sum(case when user_sex=\’男\’ or user_sex=\’1\’ then 1 else 0 end)/count(*)*100||\’%\’ 男占比 ,sum(case when user_sex in (\’女\’,\’2\’) then 1 else 0 end) 女_num,round(sum(case when user_sex in (\’女\’,\’2\’) then 1 else 0 end)/count(*)*100,3)||\’%\’ 女占比 ,sum(case when user_sex not in(\’男\’,\’女\’,\’1\’,\’2\’) then 1 else 0 end ) 中间_num,nvl(round(sum(case when user_sex not in(\’男\’,\’女\’,\’1\’,\’2\’) then 1 else 0 end )/count(*)*100,2),0)||\’%\’ 中间占比,sum(case when user_age=\’高中一班\’then 1 else 0 end ) 一班_num from user_table;

b、第二种写法,使用别名,同时使用临时表

select

D.tot_num,D.bakehe_num,D.what_num,D.男_num,round(D.男_num/D.tot_num,4)*100||\’%\’ 男占比,D.女_num,round(D.女_num/D.tot_num,4)*100||\’%\’ 女占比,D.中间_num,nvl(round(D.中间_num/D.tot_num,4)*100||\’%\’,0) 中间占比,D.一班_num from

(select count(*) tot_num,sum(case when user_name=\’bakehe\’ then 1 else 0 end) bakehe_num,sum(case when user_name=\’what\’ then 1 else 0 end) what_num,sum(case when user_sex=\’男\’ or user_sex=\’1\’ then 1 else 0 end) 男_num,sum(case when user_sex in (\’女\’,\’2\’) then 1else 0 end) 女_num,sum(case when user_sex not in(\’男\’,\’女\’,\’1\’,\’2\’) then 1 else 0 end ) 中间_num,sum(case when user_age=\’高中一班\’then 1 else 0 end ) 一班_num from user_table ) D ;

5、拼接函数:拼接函数CONCAT()和||,个人比较喜欢||,但是效率好像concat()快一些!

select concat(CONCAT(user_name||\’是\’||user_age,\’得\’)||(case user_sex when \’1\’ then \’男\’ when \’2\’ then \’女\’ else user_sex end),\’生\’) 信息 from user_table;

6、截取函数:SUBSTR(),当作为查询条件的时候,截取函数和like有点相识。

select user_id,user_name,substr(user_age,1,2) 年级,substr(user_age,3,10) 班级,user_tel from user_table;

select * from user_table where substr(user_age,3,10)=\’二班\’

select * from user_table where user_age like \’%二班%\’

7、时间函数,Oracle的时间函数非常强大,可以把字符串转换成时间格式,也可以把时间格式转换成字符串(to_char属于字符串处理函数)

select user_id,user_name,to_char(to_date(tm_smp,\’yyyymmdd hh24miss\’),\’dd-mm-yyyy day year\’) tm_smp from user_table;

select user_id,user_name,to_char(SYSDATE,\’yyyymmdd hh24miss\’) from user_table;

8、数学函数,Oracle提供了非常强大和繁多的数据计算函数,包括round(),ln(),abs(),acos(),cos(),ceil()等等。。

select user_id,user_name,tm_smp,

ceil( ( to_date(up_time,\’yyyy-mm-dd hh24:mi:ss\’)-to_date(to_char(tm_smp),\’yyyy-mm-dd hh24:mi:ss\’) )* 24 * 60 * 60) 交易用时,

floor( ( to_date(up_time,\’yyyy-mm-dd hh24:mi:ss\’)-to_date(to_char(tm_smp),\’yyyy-mm-dd hh24:mi:ss\’) ) ) 天,

mod(trunc(ceil( ( to_date(up_time,\’yyyy-mm-dd hh24:mi:ss\’)-to_date(to_char(tm_smp),\’yyyy-mm-dd hh24:mi:ss\’) )* 24 * 60 * 60)/3600),24) 小时,

floor(mod(ceil((to_date(up_time,\’yyyy-mm-dd hh24:mi:ss\’)-to_date(to_char(tm_smp),\’yyyy-mm-dd hh24:mi:ss\’))* 24 * 60 * 60),3600)/60) 分,

mod(ceil((to_date(up_time,\’yyyy-mm-dd hh24:mi:ss\’)-to_date(to_char(tm_smp),\’yyyy-mm-dd hh24:mi:ss\’))* 24 * 60 * 60),60) 秒

from user_table

9、数学函数中的三角求值,这里只简单写几个,大家想测试,可以自己写一些SQL。

select user_id,user_name,substr(tm_smp,8,10), cos(substr(tm_smp,8,10)) 余弦 ,

tan(substr(tm_smp,8,10)) 正切 from user_table;

注意:Oracle的函数非常之多,但是常用的基本就是十几个,一些简单的如:max(),min(),count(),upper(),instr(),replace()等等,大家可以私下写一写SQL验证一下。

非常欢迎大家关注我的个人微信号:thiscode

同样欢迎大家吐槽,监督!

Mybatis基础知识点:trim标签的使用

作者:wt_better

blog.csdn.net/wt_better/article/details/80992014

mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。

以下是trim标签中涉及到的属性:

下面使用几个例子来说明trim标签的使用。

有这样的一个例子:

如果这些条件没有一个能匹配上会发生什么?最终这条 SQL 会变成这样:

这会导致查询失败。如果仅仅第二个条件匹配又会怎样?这条 SQL 最终会是这样:

你可以使用where标签来解决这个问题,where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。

trim标签也可以完成相同的功能,写法如下:

有如下的例子:

如果红框里面的条件没有匹配上,sql语句会变成如下:

插入将会失败。

使用trim标签可以解决此问题,只需做少量的修改,如下所示:

其中最重要的属性是

表示去除sql语句结尾多余的逗号.

注:如果你有兴趣的话,也可以研究下Mybatis逆向工程生成的Mapper文件,其中也使用了trim标签,但结合了foreach、choose等标签,更多的是牵扯到Criterion的源码研究。不过研究完之后,你将熟练掌握mybatis各种标签的使用,学到Criterion的设计思想,对自己的启发将会很大。

对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。

PHP 8.4 发布,包含属性钩子、无需额外括号的类实例化等

hello呀,朋友们。许久不见了,因php8.4的发布,特回归我的头条来为php做做宣传。其实有看到很多关于php的评论,其中最多的评价都在说PHP老了,无法媲美正火的几种编程怨言,坚持就要饿死。有个评论感概到:“廉颇老矣,尚能干?”。小编看后,也有些许思考。不过,我很快有了自己的看法:凭我之实力和经验,虽也有不同语言开发经历,但没法去定论php是否软了,也不能说坚持走这条路要饿死,存在即合理,每个人认知和接触领域不同,在我认知的领域却发挥着重大作用,身边很多人也靠它吃饭。所以,小编希望它越来越好。

回归正题,小编放了最新的排行榜,从11月的编程语言排行榜来看,php活跃度有所增长。借着,我们来聊聊8.4给我带来了哪些特性吧。

PHP 团队发布了 PHP 8.4,其中包含新的数组查找函数、属性挂钩、无需额外括号的类实例化等:

  • PHP 8.4 中的新数组查找函数 (RFC)
  • PHP 8.4 中的属性挂钩 (RFC)
  • PHP 8.4 中无需额外括号的类实例化 (RFC)
  • 新 mb_trim 函数 (RFC)
  • 新 mb_ucfirst() 和 mb_lcfirst() 函数 (RFC)
  • PHP 8.4 中的非对称属性可见性 (RFC)
  • 还有更多…

具体可看RFC:https://wiki.php.net/rfc#php_84

现代 PHP 历史上最大的变化之一:能够定义属性钩子,从而无需大量样板代码。属性钩子受到 Kotlin、C# 和 Swift 等语言的启发,其语法包括两种类似于短闭包和多行闭包的语法变体:

案例1

属性钩子的目标是通过允许每个属性定义自己的 get 和 set 钩子来删除大量的 getter 和 setter。钩子是可选的,您不必在特定属性上同时添加它们。例如,只有 get 钩子的属性是虚拟属性。

案例2

属性钩子将有助于消除属性 getter 和 setter 的样板,允许属性使用钩子定义访问和更新。

PHP 8.4 将附带新的数组查找函数,包括:

  • array_find()
  • array_find_key()
  • array_any()
  • array_all()

array_find()

PHP 8.4 中添加了一个非常简单的新函数,我想大多数开发人员已经习惯了第三方集合类,看着很亲切,和array_filter()也有相似之处。

array_find 返回 $callback 返回 true 的第一个元素的值。如果未找到匹配的元素,则函数返回 NULL

由于引入了实例化期间的成员访问,因此必须将 new MyClass() 调用括在括号中,否则会出现解析错误。建议的语法将允许您访问常量、属性和方法,而无需额外的括号:

此更新修复了 papercut,使类成员访问变得更简单,无需添加括号或使用静态构造函数方法。此语法更改还使 PHP 与其他 C 语言(如 Java、C# 和 TypeScript)更加一致,这些语言不需要括号。

在 PHP 8.4 中,使用新的 createFromTimestamp() 方法从 Unix 时间戳创建 DateTime 将更加方便。它将支持典型的 Unix 时间戳以及包含微秒的时间戳:

在早期版本的 PHP 中,有几种方法可以根据时间戳创建 DateTime 实例,例如 createFromFormat() 方法:

PHP 8.4 的另一个突破性功能是不对称可见性。不对称可见性允许类属性根据读取或写入上下文定义其可见性(公共、受保护或私有)。不对称可见性的最常见示例是只能在类内部更改的公共属性。这样的属性如下所示:

因为“只能在私有上下文中更改的公共属性”是不对称可见性的最常见用例,所以也有可用的简写:

当然,你也可以使属性仅在受保护的范围内可写:

当然,该语法也适用于提升的属性:

PHP 很早就有 trim、ltrim、rtrim、ucfirst 和 lcfirst 函数,现在 PHP 8.4 为这些函数添加了 mb_ 多字节字符串支持。

  • mb_trim()
  • mb_ltrim()
  • mb_rtrim()
  • mb_ucfirst()
  • mb_lcfirst()

PHP 8.4 添加了 \\Dom\\HTMLDocument 类,该类能够正确解析 HTML5 代码。旧版 \\DOMDocument 类仍可用,以实现向后兼容。

< 8.4

PHP 8.4 改变了 JIT 的启用方式。以前,您必须将 opcache.jit_buffer_size 设置为 0 才能禁用 JIT,但现在您可以像这样禁用它:

用户唯一会受到此更改影响的情况是,他们指定了 opcache.jit_buffer_size,但没有指定 opcache.jit。在这种情况下,您必须添加 opcache.jit=tracing 才能再次启用 JIT。

最后,JIT 也进行了一些改进,在某些情况下,JIT 的运行速度更快,并且占用的内存更少。

PHP 8.4 添加了对惰性对象的原生支持,这是框架用于构建代理对象的常见模式。

总之,8.4带来了很多新特性,更多内容参考:https://www.php.net/releases/8.4/zh.php。同时,本文内容参考自:

  • https://www.php.net/releases/8.4/zh.php
  • https://laravel-news.com/php-8-4-0
  • https://stitcher.io/blog/new-in-php-84

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。