5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)(一)

2015-02-02 23:36:54 · 作者: · 浏览: 20

1 多行函数(理解:有多个输入,但只输出1个结果)

SQL>select count(*) from emp;

COUNT(*)

-------------

14

B 字符函数Lower

select Lower('Hello') 转小写,

upper('hello') 转大写,

initcap('hello woRld') 首字母大写

from dual;

结果:

转小 转大 首字母大写

---------- -----------

helloHELLO Hello World

C字符函数 concat:

select concat('hello','world') from dual

concat函数嵌套:

select concat (concat('hello', 'world'),'cccc') 函数嵌套 from dual;

函数嵌套

--------------

helloworldcccc

D字符函数 substr()

SUBSTR(a,b) --- 从a中第b位去字符串

substr(a, b, c) 从a中第b位, c个字符....

select substr('abcdefg1111', 2) 从第二位取子串,

substr('abcdefg1111', 2, 4) 取4个字符

from dual;

从第二位取取4

----------------- ------

bcdefg1111 bcde

E length字符数 lengthb字节数

注意:一个中文字符,两个字节

select length('中国abc') 字符数,

lengthb('中国abc') 字节数

from dual;

运行结果:

字符数 字节数

---------- ----------

5

F instr(),lpad(),rpad(),trim()函数

select instr('abcdefg', 'efg') 求子串位置 from dual;

求子串位置

----------------

5

selectlpad('abcd', 10, '*') lpad, rpad('abcd', 10, '*') rpad from dual;

LPAD RPAD

---------- ----------

******abcd abcd******

--trim 去掉前后指定的字符,字符可以是空格,也可以不是空格 .

selecttrim('A' from 'ABCDEFg') from dual;

TRIM('

------

BCDEFg

2 数字函数

第二个参数

含义

2> 0

保留2位

= 0

保留到个位

-1

保留到10位

-2

保留到百位(要看十位四舍五入)

selectround(45.926, 2) AA,

round(45.926, 1) BB,

round(45.926, 0) CC,

round(45.926) DD,

round(45.926, -1) EE,

round(45.926, -2) FF

from dual;

结果:

AA BB CC DD EE FF

---------- ---------- ---------- ---------- ---------- ----------

45.93 45.9 46 46 50 0

3 日期函数

时间的计算.......

oracle数据库中 date包含日期和时间

mysql 3中数据类型 date 、time 、times.

A selectto_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual ;

TO_CHAR(SYSDATE,'YY

-------------------

2014-10-0716:34:17

B ----昨天今天明天

select sysdate-1 昨天,

sysdate 今天,

sysdate+1 明天

from dual;

selectto_char(sysdate-1, 'yyyy-mm-dd hh24:mi:ss') 昨天,

sysdate 今天,

sysdate+1 明天

from dual;

C ----查询员工的入职时间,按照周 月 年方式显示.....

select(sysdate-hiredate)/7 周,

(sysdate-hiredate)/30 月,

(sysdate-hiredate)/365 年

from emp;

?

select (sysdate-hiredate)/7 周,

(sysdate-hiredate)/30 月,

(sysdate-hiredate)/365

from emp;

周 月 年

---------- ---------- ----------

1763.95625 411.589791 33.8292979

1754.67053 409.423125 33.6512157

1754.38482 409.356458 33.6457363

D 查询员工的入职时间, 入职月数

selectename,

(sysdate-hiredate)/30 估计月,

MONTHS_BETWEEN(sysdate, hiredate) 函数计算月

from emp

select ename,

(sysdate-hiredate)/30 估计月,

MONTHS_BETWEEN(sysdate, hiredate) 函数计算月

from emp;

ENAME 估计月函数计算月

---------- ---------- ----------

SMITH 411.589872 405.699876

ALLEN 409.423205 403.603102

WARD 409.356539 403.538586

JONES 408.056539 402.183747

MARTIN 402.089872 396.345037

selectnext_day(sysdate, '星期六') from dual ;

NEXT_DAY(SYSDA

--------------

11-10月-14

4 数据类型转换

select * from emp where hiredate >'01-1月 -81'

A 日期相关类型转换

比这个日期都要大的08-9月 -81 所有员工信息按照三种方式实现

(1):隐式类型转换

select*

from emp

where hiredate > '01-1月 -81';

(2):字符串转成日期..显示类型转换

select*

from emp

where hiredate > to_date('1981-01-0102:03:04', 'yyyy-mm-dd hh24:mi:ss');

(3):日期转换成为日期类型的字符串:

select*

from emp

where to_char(hiredate, 'yyyy-mm-ddhh24:mi:ss') > '1981-01-01 02:03:04'

5 数字和字符串转换

A --查询员工的薪水:两位小数本地货币代码千位符

Y1,250.00

select empno, ename, to_char(sal, 'L9,999.99')

fromemp

结果:

EMPNO ENAME TO_CHAR(SAL,'L9,999

---------- ---------- -------------------

7369SMITH ¥800.00

7499ALLEN ¥1,600.00

7521WARD ¥1,250.00

7566JONES ¥2