日期函数及ORDER BY

这些年,我们经历了多轮的淘汰赛,每轮淘汰赛都面临不同的对手,但每轮淘汰赛中我们都发展了

知识点

order by 的排序规则

单纯使用order by排序中文,是根据ascii码排序的,不是根据拼音排序的。

默认情况下,查询语句返回的查询结果会按照数据在表中的存储顺序显示,ORDER BY子句的作用就是对查询的结果集进行排序,以便可以按照用户的需求显示数据。ORDER BY子句的后面可以是表的列名、列的别名、列的序号和表达式。ASC关键字表示结果按照升序排列,DESC关键字表示结果按照降序排列,默认按照升序对记录进行排序。如果使用了ORDERT BY子句,则ORDER BY子句必须是查询语句的最后一个子句。

不同数据类型的排序规则(以升序为例)

(1)数值类型的数据按照数值大小的顺序由小到大排列。

(2)日期类型的数据排序规则是较早的日期在前,较晚的日期在后。例如,“01-1月-11”排在“01-1月-12”之前。

(3)英文字符按照字母由大到小的顺序排列,且大写字母排在小写字母的前面,即按照A~Z、a~z的顺序排列。

(4)中文的排序规则如下所示。

数据库服务器或客户端使用的字符集决定了使用何种语言,而在Oracle数据库中不同的语言的排序方式各不同。如果采用的字符集是ZHS16GBK,那么ORDER BY子句默认的是按照汉字的拼音顺序进行排序的;如果采用的是其他字符集(如UTF-8),那么汉字的排序是按照BINARY(二进制编码)排序的,即按照编码的大小来排序。

日期函数

MONTHS_BETWEEN函数的功能是计算日期1和日期2之间的月份数,语法格式如下;

MONTHS_BETWEEN(日期1,日期2);

如果日期1大于日期2,其返回的月数为正数,否则为负数。当两个日期之间的月份差不是整月时,将采用小数表示。如果计算结果不是整数,则会将所差的天数除以31的值作为结果,但是如果两个日期都是月末最后一天或者日期相同的话,都会按整月进行计算。

NVL函数

NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,主要用于对数据列上的空值进行处理,语法格式如:

NVL(列名或表达式,列名或表达式);

如果第一个参数的值为空值,则返回第二个参数的值,否则返回第一个参数的值。如果两个参数的值都为空值,则返回空值。第一个参数和第二个参数可以是任何类型的数据,但两个参数的数据类型必须相同(或能够由Oracle隐式转换为相同的类型)。

练习

1。创建一个查询,来显示雇员的名字和工资。其工资要在$2850以上。将该语句保存到一个文件中:p2q1.sql。在sqlplus中执行该文件。

2.更改文件p2q1.sql中的命令,将查询条件改为:工资(sal)在$1500和$2850之间。重新执行该文件。

注:@和start是一个东西,他们用于运行其它的脚本文件

3.查询出雇员表中部门号为10和30的所有员工的姓名、工作、雇佣日期信息,要求按照雇佣日期的降序进行排序。

注:隐性转换对于用户是不可见的。 Oracle自动将数据从一种数据类型转换成另一种数据类型。

4.查询出姓名中第三个字母为:“A”的所有员工的姓名。

5.查出佣金比工资多出10%的员工的姓名。

复杂的话,写成如下:

注意如果sal有空的,(注意分母不能为0,而且保持原来的数据最好用1)

6.找出工作超过3500天的员工的姓名、工号、其工作天数和工资,并按工资降序输出,若工资相同,则按工作天数升序,若工作天数也一样,则按员工工号降序输出

7.查询各部门中81年1月1日以后来的员工数

8.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面?

9. 查询列出来公司就职时间超过24年的员工名单

ADD_MONTHS函数的功能是在第一个参数的基础上加上第二个参数个月,如果第二个参数为负数,则表示在第一个参数的基础上减去第二个参数个月,语法格式如下:ADD_MONTHS(日期,n);

10. 查询于81年来公司所有员工的总收入(SAL和COMM)

下方查看历史文章

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180613G0S2ZD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券