不定时更新自己用到的oracle 比较有用的sql语句和函数用法

今天做根据季度统计的功能,要实现这个功能,需要知道当前月份在第几个季度。这里日期用sysdate来代替数据库里面的日期字段。

首先要得到月份月份在第几季 select to_char(sysdate,'Q') from dual;第一季度是1,第二季度是2.......

然后根据季度的值来显示第几季度。这里用到decode函数。首先看看decode的含义

含义解释:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

该函数的含义如下:

IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

最后的sql如下:select decode(to_char(sysdate,'Q'),'1','第一季度','2','第二季度','3','第三季度','4','第四季度') from dual

在实际应用中就大概是select decode(to_char(经过转换后的你的日期,格式为YYYY-MM-DD,'Q'),'1','第一季度','2','第二季度','3','第三季度','4','第四季度') from 你的表名



2.需要统计超标率,也就是两个字段相除得到百分比,先上sql,在项目里大概是这样的

select cast((你的字段1/你的字段2)*100 as decimal(18,2))||'%' from dual    两个字段相除,取小数点后面两位数,然后再拼接上百分号。当然,需要注意除数不能为0。

这里写一下cast的用法,官方文档

CAST

CAST converts values from one data type to another.

Return Value

The data type specified by type_name.

Syntax

<span class="bold" style="font-weight: bold;">CAST</span>(expr <span class="bold" style="font-weight: bold;">AS</span> type_name)
<span style="font-family: Tahoma, sans-serif; font-weight: bold; font-size: 16px; background-color: rgb(255, 255, 255);">Arguments</span>

expr can be an expression in one of the data types.

type_name is one of the data types listed in Table1-2,"Dimensional Data Types".

Table 3-1 shows which data types can be cast into which other built-in data types. NUMBER includes NUMBERDECIMAL, and INTEGERDATETIME includes DATE,TIMESTAMPTIMESTAMP WITH TIMEZONE, and TIMESTAMP WITH LOCAL TIMEZONEINTERVAL includes INTERVAL DAY TO SECOND and INTERVAL YEAR TO MONTH.

Table 3-1 Compatible Data Types

FromTo BINARY_FLOAT, BINARY_DOUBLETo CHAR, VARCHAR2To NUMBERTo DATETIME, INTERVALTo NCHAR, NVARCHAR2

BINARY_FLOAT, BINARY_DOUBLE

yes

yes

yes

no

yes

CHAR, VARCHAR2

yes

yes

yes

yes

no

NUMBER

yes

yes

yes

no

yes

DATETIME, INTERVAL

no

yes

no

yes

yes

NCHAR, NVARCHAR2

yes

no

yes

no

yes

通过官方文档,cast可以把一种类型的转换为另一种类型。但是某些类型之间是不可以转换的,就是表3-1里面的no.

cast(expr as type_name) expr可以是表达式,数据库字段等,type_name是要转换成的类型。



3、点击合计值,查看明细

一般需要统计的基本都是数值。所以就以数值为例吧。

比如统计某个项目的人员总共的出差天数,点击合计值,展示项目的明细,包括有哪些人员等等。这里需要用到分组函数

select 字段一,字段二,字段三,字段四,字段五  from 表名 [可以加上where条件] group by 字段一,字段二,字段三,字段四,字段五 having sum(要统计的字段,比如天数)=10,

这样基本就能实现点击汇总查看明细了。


4、关于日期的一些计算,这些经常用到。这里就不写比较常见的了,总结了几个比较有难点的sql

得到一年中的所有的天数

select trunc(to_date('2016-12-31','yyyy-mm-dd'),'yyyy')+rownum-1 as aaa from dual connect by rownum<=(to_date('2016-12-31','yyyy-mm-dd')-to_date('2016-01-01','yyyy-mm-dd')+1)

得到一年有多少天

select (add_months(trunc(sysdate,'yyyy'),12)-1)-trunc(sysdate,'yyyy')+1 from dual;

得到今天是一周中的第几天,如果是第一天,则为周日,以此类推,第七天是周六

select to_char(to_date('2016-10-22','yyyy-mm-dd'),'d')from dual;

5、oracle截取以逗号分隔的字符串。比如一个字符串 'a,b,c',现在想分别得到a,b和c

select regexp_substr('a,b,c','[^,]+',1,rownum) from dual connect by rownum<=length('a,b,c')-length(replace('a,b,c',',',''))+1;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle和Hive SQL语句有一些相似之处,但也有一些不同之处。 相似之处: 1. 语法:Oracle和Hive SQL语句的语法都是基于SQL标准的,因此它们有很多相似之处。 2. 数据类型:Oracle和Hive SQL语句都支持常见的数据类型,如整数、浮点数、字符串等。 3. 聚合函数Oracle和Hive SQL语句都支持聚合函数,如SUM、AVG、MAX、MIN等。 不同之处: 1. 分区:Hive SQL语句支持分区,可以将数据按照某个字段进行分区,提高查询效率。而Oracle没有这个功能。 2. 数据类型:Hive SQL语句支持更多的数据类型,如数组、结构体等,而Oracle不支持。 3. 执行引擎:Oracle和Hive SQL语句的执行引擎不同,Oracle使用的是传统的关系型数据库引擎,而Hive使用的是基于Hadoop的MapReduce引擎。 总的来说,Oracle和Hive SQL语句都有各自的优缺点,需要根据具体的需求来选择使用哪种语句。 ### 回答2: Oracle和Hive SQL是两种不同的数据库管理系统,它们各有优点和劣势,在处理大数据的时候有着不同的比较。下面将从各个方面来比较它们的优劣。 一、数据类型的支持 Oracle支持的数据类型较为丰富,包括基本的整型、字符型、日期型,还有二进制大对象等复杂数据类型,在数据处理的时候更为灵活,支持更多的应用场景。 而Hive SQL在数据类型的支持上相对较少,主要支持整型、浮点型、字符串、日期等基本数据类型,不支持复杂的二进制对象。 二、数据分析功能 Oracle在数据分析方面有着强大的功能,支持窗口函数、分析函数、统计函数等高级分析功能。它可以快速的进行数据分析和处理。 而Hive SQL在数据分析方面相对较弱,主要支持基本的数据分析功能,但是由于它的数据存储方式是分布式的,可以通过MapReduce来处理更大的数据集。 三、性能方面 Oracle在性能方面表现良好,在多用户的高并发情况下也有着出色的表现。通过多线程的方式处理大量数据,在响应速度和数据处理能力上都比较强。 而Hive SQL在性能方面较为一般,在处理大量数据时需要较长的时间和较大的计算资源。但是它的分布式存储方式可以保证数据的并发性和容错性。 四、编程接口 Oracle支持多种编程语言,比如Java、C++、Python等,而Hive SQL主要使用HiveQL语言,也可以通过Java和Python等编程语言来操作Hive。 总的来说,Oracle和Hive SQL各有优点,在不同的场景下选择适合自己的工具才是最佳的选择。如果你要处理的数据较为复杂,需要进行高级的数据分析,可以选择Oracle数据库;如果你需要处理的是大量分布式的数据,可以选择Hive SQL。 ### 回答3: Oracle和Hive SQL是两种不同的数据库管理系统,它们都有自己的优点和缺点,也可以根据不同的需求进行选择。 Oracle是一种商业化的数据库管理系统,它具有强大的性能和扩展性,可以支持非常大规模的数据处理和存储。Oracle可以通过多种方式进行访问和管理,包括命令行、Web界面、可视化工具等等。它还提供了非常强大的安全性和可靠性,可以处理高并发的各种数据库操作。另外,Oracle也有非常广泛的使用场景,是传统企业数据管理的首选之一。 相比之下,Hive SQL主要是为大数据处理而设计的,它可以将数据存储在Hadoop分布式文件系统中,通过MapReduce进行处理。Hive SQL可以使用类SQL语法来进行数据分析和查询,非常适合于处理非结构化数据和大规模的数据集。Hive SQL还具有较低的成本和高可伸缩性,可以扩展到数百万个节点,可以运行在云环境中。 总体来说,Oracle和Hive SQL都是非常强大、成熟的数据库管理系统,它们提供了不同的功能和使用场景。对于处理传统企业数据的场景,Oracle是更为合适的选择。如果需要处理大规模的非结构化数据集,或者需要在云环境中运行,那么Hive SQL则是更好的选择。不过,这并不是绝对的答案,具体选择还需要根据实际需求进行权衡和评估。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值