日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


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,975.00

??????????????????????????? 7654MARTIN????????????? 1,250.00

??????????????????????????? 7698BLAKE?????????????? 2,850.00

??????????????????????????? 7782CLARK?????????????? 2,450.00

???????????????????????????

B? 把這個字符¥1,250.00,轉成數字.....

???????? ?select to_number('1,250.00','L9,999.99') from dual ;

???????? ?TO_NUMBER('1,250.00','L9,999.99')

???????? ?-----------------------------------

???????????????????????????????????? ????? 1250

6 通用函數

A? 給員工漲工資:總裁 1000? 經理:800? 其他漲500,

?===============================================

分析:前后工資給列出來

if (job == 'PRESIDENT')

???????? ??? SAL+1000

else if (job == 'MANAGER')??????

???????? ??? SAL+800

else?

???????? ??? SAL+500

???================================================

???????? 使用的知識點:

CASE expr WHEN comparison_expr1 THEN return_expr1

?????????[WHEN comparison_expr2 THENreturn_expr2

?????????WHEN comparison_exprn THEN return_exprn

?????????ELSE else_expr]

END

===============================================

??? 轉化:

CASE job when 'PRESIDENT' then sal+1000

?????????????????? when'MANAGER' then sal+800

??????????????????????????? elsesal + 500

END

??? =============================================

select ename, job, sal 漲前工資,

??????? ? (

???? ????????? CASE job when 'PRESIDENT' then sal+1000

???????? ??? ???????????????????????????????????? when'MANAGER' then sal+800

???????? ??? ???????????????????????????????????? elsesal + 500

??????????????????????????? END

??????? ? )

??????? ?漲后工資

???? from emp

????-----------------------------------------------------------------------------------------------------

???? 結果:

???????????????????????????????????? ENAME????? JOB???????? 漲前工資?? 漲后工資

???????????????????????????????????? ------------------- ---------- ----------

???????????????????????????????????? SMITH????? CLERK??????????? 800?????? 1300

???????????????????????????????????? ALLEN????? SALESMAN??????? 1600?????? 2100

???????????????????????????????????? WARD?????? SALESMAN??????? 1250?????? 1750

???????????????????????????????????? JONES????? MANAGER???????? 2975?????? 3775

???????????????????????????????????? MARTIN???? SALESMAN??????? 1250?????? 1750

???????????????????????????????????? BLAKE????? MANAGER???????? 2850?????? 3650

???????????????????????????????????? CLARK????? MANAGER???????? 2450?????? 3250

???????????????????????????????????? SCOTT????? ANALYST???????? 3000?????? 3500

???????????????????????????????????? KING?????? PRESIDENT?????? 5000?????? 6000

???????????????????????????????????? TURNER???? SALESMAN??????? 1500?????? 2000

???????????????????????????????????? ADAMS????? CLERK?????????? 1100?????? 1600

???????????????????????????????????? JAMES????? CLERK??????????? 950?????? 1450

???????????????????????????????????? FORD?????? ANALYST???????? 3000?????? 3500

???????????????????????????????????? MILLER???? CLERK?????????? 1300?????? 1800

????????????????????????????????????

???????????????????????????????????? 已選擇14行。

?

B?? 第二種方法

? ===================================================

??? 語法:

DECODE(col|expression, search1, result1

??????????????????????????? ???[, search2, result2,...,]

??????????????????????????? ???[, default])

==================================================

轉化:

decode(job, 'PRESIDENT', sal+10000, 'MANAGER', sal+800, sal+500)

===================================================

select ename, job, sal 漲前工資,

??? ???????? (

??? ???????????????? decode(job, 'PRESIDENT', sal+10000,'MANAGER', sal+800, sal+500)

??????? ???)

??????? ??? 漲后工資

????? from emp;

總結

以上是生活随笔為你收集整理的5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。