SQL语言(5)

1.数字函数

Round(arg1,arg2)

四舍五入指定小数的值;
Arg1:数字类型。原数字;
Arg2:整数类型。小数点保留的位数,可以是一个负数,负数则表示指定整数的位置;正数是以小数点为中心向又进行四舍五入,负数正好相反;

Round(arg1)

四舍五入保留整数;与round(arg1,0)等同;
Arg1:数字类型。原数字;

Trunc(arg1,arg2)

截断指定小数的值,不做四舍五入处理;
Arg1:数字类型,原数字;
Arg2:整数类型,小数点保留的位数,可以是一个负数,负数则表示指定整数的位 置;

Trunc(arg1)

保留整数;与trunc(arg1,0)等同;
Arg1:数字类型,原数字;

Mod(arg1,arg2)

取余;
Arg1:数字类型。被除数;
Arg2:数字类型。除数;
(以hr用户中的employees为例)
*



1.计算所有是销售代表(SA_REP)的雇员的工资被5000除后的余数;
Select mod(salary,5000) from employees where job_id = ‘SA_REP’;

2.日期的处理

(1)Sysdate函数

Sysdate是一个日期函数,他返回当前数据库服务器的日期和时间;

(2)用日期计算

日期加或者减一个数,结果是一个日期值;

两个日期相减得到两个日期之间的天数;

用小时数除以24,可以加小时到日期上;

mysql integer负数修改为正数 sql sql 负数转正数_字符串


(以hr用户中的employees为例)

*例:


显示所有在部门90中的雇员的名字和从业的周数。雇员的总工作时间以周计算;
Select last_name , (sysdate - hire_date)/7 from employees where department_id = 90;

3.日期函数

mysql integer负数修改为正数 sql sql 负数转正数_数据类型转换_02

Month_between(date1,date2)

计算date1和date2之间的月数。其结果可以是正数也可以是负数。如果date1大 于date2,结果是正,反正结果为负;
Date1:日期类型;
Date2:日期类型;

Add_months(date1,num)

添加num个日历月到date。
Num的值必须是整数,但可以是负数。
Date:日期类型;
Num:整数类型;

Next_day(date,’char’)

计算date之后的下一个周(’char’)的指定的星期。
Char的值可能是一个表示一天的数或者是一个字符串。(Char为星期几)如果使用 数字表示星期,1 是从星期日开始的。数字范围1-7(数字不需要加单引号);
Date:日期类型;
Char:数字或字符串;

Last_day(date)

计算包含date的月的最后一天的日期;
Date:日期类型;

Round(date,’fmt’)

返回用格式化模式fmt(yy/year/mm/month)四舍五入到指定单位的date,如果格 式模式fmt被忽略,date被四舍五入到最近的天;
Date:日期类型;
Fmt:字符串类型;

Trunc(date,’fmt’)

返回用格式化模式fmt截断到指定单位的当天,如果格式模式fmt被忽略,date被 截断到最近的天;
Date:日期类型;
Fmt:字符串类型;
(以hr用户中的employees为例)

例:

一、查询所有受雇在15年(180个月)以内的雇员的ID,入职时间,显示他们以被雇用的月,从受雇日期开始加6个月的试用期后的日期,受雇日期后第一个星期五是几号,以及受雇月的最后一天是几号;
Select employee_id,hire_date,months_between(sysdate,hire_date),add_months(hire_date,6),next_day(hire_date,’金曜日’),last_day(hire_date) from employees where months_between(sysdate,hire_date) < 180;
二、查询受雇日期,找出2002年开始工作的那些人,用round和trunc函数显示开始的月份;
Select last_name , round(hire_date,’mm’) , trunc(hire_date,’mm’) from employees where hire_date like ‘02%’;

4.数据类型转换

mysql integer负数修改为正数 sql sql 负数转正数_四舍五入_03

隐式数据类型转换

当原数据的类型和目标数据类型不同的时候,如果没有转换函数,就会发生隐式 转换,也称为自动转换;

隐式转换的两大问题:

1.性能影响
隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描;
2.不便于阅读:
由于隐式转换使得数据库编程人员和DBA难以了解到究竟发生了怎样的类型 转换,而且如果代码很多很长的话,要查出错误就需要花很长时间;

显示数据类型转换

mysql integer负数修改为正数 sql sql 负数转正数_字符串_04

1.to_char(arg1,’fmt’)

将一个日期或者数字转换为字符类型,带格式化样式fmt;
Arg1:数字或者日期类型;要求要转换的数据;
Fmt:转换的格式;

to_char日期转换;

日期格式的模板元素

mysql integer负数修改为正数 sql sql 负数转正数_数据库_05


时间格式模板元素

mysql integer负数修改为正数 sql sql 负数转正数_字符串_06

日期的时间部分,时间元素格式
Hh24:mi:ss am
*

*:select to_char(sysdate,’hh24:mi:ss:am’) from dual;

其他格式

mysql integer负数修改为正数 sql sql 负数转正数_数据库_07

指定后缀来影响数字显示

mysql integer负数修改为正数 sql sql 负数转正数_数据库_08

(以hr用户中的employees为例)

显示所有雇员的名字和受雇日期,受雇日期以2007年8月10日 12:00:00 AM 显示;
Select last_name , to_char(hire_date,’yyyy”年”mm”月”dd”日” hh:mi:ss AM’) from employees;

To_char 数字转换

数字格式模板

mysql integer负数修改为正数 sql sql 负数转正数_数据库_09

Fm:代表去掉返回结果中的前后空格;

(以hr用户中的employees为例)

查询雇员Whalen,显示他的薪水,在薪水前添加美元符号与千位符;
Select last_name,to_char(salary,’fm$999,999,999.00’) from employees where last_name = ‘Whalen’;