Oracle入门(十四C)之转换函数
一、數(shù)據(jù)轉換類型
為數(shù)據(jù)庫創(chuàng)建表時,SQL 程序員必須定義在表的各個字段中存儲何種數(shù)據(jù)。在 SQL 中,有幾種不同的數(shù)據(jù)類型。這些數(shù)據(jù)類型用于定義每個列中可以包含的值的范圍。
(1)在本文中將使用以下數(shù)據(jù)類型
VARCHAR2CHAR
NUMBER
DATE
(2)數(shù)據(jù)類型
VARCHAR2:用于可變長度的字符數(shù)據(jù),包括數(shù)字、特殊字符和短劃線。
CHAR:用于固定長度的文本和字符數(shù)據(jù),包括數(shù)字、短劃線和特殊字符。
NUMBER:用于存儲可變長度的數(shù)字數(shù)據(jù)。不能包含短劃線、文本及其它非數(shù)字數(shù)據(jù)。貨幣存儲為 NUMBER 數(shù)據(jù)類型。
DATE:用于日期和時間值。在內(nèi)部,Oracle將日期存儲為數(shù)字,默認情況下,DATE 信息的顯示格式為 DD-MON-YY(如 19-JUN-04)。
(3)四種數(shù)據(jù)類型轉換函數(shù)
Oracle Server 可以在內(nèi)部將VARCHAR2 和 CHAR 數(shù)據(jù)轉換為 NUMBER 和 DATE數(shù)據(jù)類型。它可以將 NUMBER和 DATE 數(shù)據(jù)轉換回CHARACTER 數(shù)據(jù)類型。雖然這是一種方便的功能,但最好始終顯式執(zhí)行數(shù)據(jù)類型轉換,以確保 SQL 語句可靠。
將學習以下四種數(shù)據(jù)類型轉換函數(shù):
? 將日期數(shù)據(jù)類型轉換為字符數(shù)據(jù)類型? 將數(shù)字數(shù)據(jù)類型轉換為字符數(shù)據(jù)類型
? 將字符數(shù)據(jù)類型轉換為數(shù)字數(shù)據(jù)類型
? 將字符數(shù)據(jù)類型轉換為日期數(shù)據(jù)類型
二、將日期數(shù)據(jù)轉換為字符數(shù)據(jù)
(1)經(jīng)常需要將以 DD-MON-YY 默認格式存儲在數(shù)據(jù)庫中的日期轉換為用戶指定的其它格式。
用來完成此任務的函數(shù)是:
TO_CHAR (日期列名, '指定的格式樣式')? “格式樣式”是區(qū)分大小寫的,并且必須放在單引號內(nèi)。
? 需要用逗號將日期值與“格式樣式”隔開。
? 可以使用任何有效的日期格式元素。
? 可以使用 fm 元素從輸出中刪除填充的空格或刪除前導零。
? 可以使用 sp 以文本形式顯示數(shù)字。
? 可以使用 th 將數(shù)字顯示為序數(shù)。(1st、2nd、3rd,依此類推)。
? 可以使用雙引號將字符串添加到格式樣式中。
(2)這些表顯示了可以使用的各種格式樣式。請注意,指定時間元素時,還可以設置小時 (HH)、分鐘 (MI)、秒 (SS) 和 AM 或 PM 等格式。
(3)例如,以下查詢將返回 May 04, 2004。如果某個活動的日期是 04-MAY-04,則使用 fm格式樣式時將返回 May 4, 2004,即隱藏前導零。
SELECT TO_CHAR (活動日期, 'fmMonth dd, RRRR')? FROM d_活動;
以下查詢的輸出結果是什么?SELECT 標識, TO_CHAR(活動日期, 'MONTH DD, YYYY')? FROM d_活動;
(4)日期和時間格式樣式
使用哪些格式樣式可將今天的日期分別輸出為以下格式?
August 6th, 2007August 06, 2007
AUG 6, 2007
August 6th, Friday, Two
Thousand Seven
三、將數(shù)字數(shù)據(jù)轉換為 VARCHAR2 字符數(shù)據(jù)
(1)存儲在數(shù)據(jù)庫中的數(shù)字是不含格式的。
這意味著沒有貨幣符號、逗號千位分隔符和小數(shù),也沒有其它格式。要添加格式,您需要先將數(shù)字轉換為字符格式。在進行字符連接時此轉換尤為有用。
用來將數(shù)字數(shù)據(jù)列轉換為所需格式的 SQL 函數(shù)是:TO_CHAR(數(shù)字,'格式樣式')
(2)此表介紹了可在TO_CHAR 函數(shù)中使用的幾種格式元素。
SELECT TO_CHAR(費用,'$99,999') 費用? FROM d_活動
(3)使用哪些格式樣式可以生成如下輸出結果?
$3000.00
4,500
9,000.00
0004422
四、將字符數(shù)據(jù)轉換為數(shù)字數(shù)據(jù)
(1)經(jīng)常需要將字符串轉換成數(shù)字。用來完成此轉換的函數(shù)是:
TO_NUMBER(字符串, '格式樣式')
此函數(shù)將非數(shù)字值(如‘450’)轉換成數(shù)字,不帶單引號。
單引號是字符。“450”在數(shù)據(jù)庫中存儲為字符數(shù)據(jù),以下查詢將其轉換成數(shù)字,以便執(zhí)行算術運算。無法對字符數(shù)據(jù)執(zhí)行計算。
SELECT TO_NUMBER('450') AS "數(shù)字轉換"? FROM DUAL;
(2)SELECT TO_NUMBER('450', '9999') + 10 AS "數(shù)字轉換" FROM DUAL;
SQL*Plus 會將超過格式樣式指定位數(shù)的數(shù)字顯示為一串井號 (#);還會將數(shù)字舍入到格式樣式中提供的小數(shù)位。
如果格式樣式與數(shù)據(jù)庫返回的實際數(shù)字不匹配,OracleApplication Express 將返回“Oracle 錯誤 - 數(shù)字無效”。
五、將字符數(shù)據(jù)轉換為日期數(shù)據(jù)
(1)要將字符串轉換成日期格式,請使用以下格式:
TO_DATE('字符串', '格式樣式')
此轉換接受非日期值字符串(如“November 3, 2001”),并將其轉換成日期值。格式樣式告訴服務器該字符串“看起
來像”什么:
TO_DATE('November 3, 2001', 'Month dd, RRRR')
將返回 03-NOV-01
(2)在執(zhí)行字符到日期的轉換時,fx(格式完全匹配)限定符指定字符參數(shù)必須與日期格式樣式完全匹配。
請注意,在下面的示例中,“May10”中的“May”和“10”之間沒有空格。只有當 fx 格式樣式中的“Mon”和“DD”之間也沒有空格時,它才與字符參數(shù)相匹配。
SELECT TO_DATE('May10,1989', 'fxMonDD,RRRR') AS "轉換"? FROM DUAL;
(3)fx 限定符規(guī)則
fx 限定符規(guī)則如下:
? 字符參數(shù)中的標點和加引號文本必須與格式樣式中的對應部分完全匹配(大小寫除外)。
? 字符參數(shù)不能有額外的空格。不使用fx 時,Oracle Server 會忽略額外的空格。
? 字符參數(shù)中的數(shù)字數(shù)據(jù)必須與格式樣式中的對應元素具有相同的位數(shù)。不使用fx 時,字符參數(shù)中的數(shù)字可省略前導零。
(4)RR 日期格式和 YY 日期格式
不久前,我們從 20 世紀(1900) 進入了 21 世紀(2000),這一變化帶來了相當大的混亂。那就是,如果一個日期寫為02-JAN-00,那么應當將其解釋為 1900 年 1 月 2 日還是 2000 年 1 月 2 日?
幸運的是,Oracle 采用了適當?shù)姆绞?#xff0c;可保證這類日期在存儲和檢索時都具備正確的世紀。
六、幾個簡單的規(guī)則
(1)如果指定日期格式時使用的是 YY 或 YYYY 格式,則返回的值在當前世紀中。所以,如果當前年份是 1995 而您使用的是 YY或 YYYY 格式,則一切正常,日期將在 20 世紀中。但是,如果當前年份是 2004,而您為 1989 之類的日期使用的是 YY 或YYYY格式,則返回的將是 2089!這可能不是您希望得到的結果。
(2)如果指定數(shù)據(jù)格式時使用的是 RR 或 RRRR 格式,則返回的值有兩種可能。
如果當前年份介于 00 到49 之間,那么:
? 對于 0 到 49 之間的日期:日期將在當前世紀中
? 對于 50 到 99 之間的日期:日期將在上一個世紀中
如果當前年份介于 50 到 99 之間,那么:
? 對于 0 到 49 之間的日期:日期將在下一個世紀中? 對于 50 到 99 之間的日期:日期將在當前世紀中
(3)使用以下語句查詢雇員數(shù)據(jù)庫時,它返回了表中的所有行。我知道僅有一部分雇員是在 1990 年之前聘用的。我弄錯了嗎?
SELECT 姓氏, TO_CHAR(聘用日期,'DD-Mon-YYYY')??
FROM 雇員??
WHERE 聘用日期 <TO_DATE('01-Jan-90','DD-Mon-YY');
七、術語
本課中使用的主要術語包括:
CHAR
DATE
DD 日期格式
轉換函數(shù)
fm
NUMBER
RR 日期格式
TO_CHAR
TO_DATE 函數(shù)
TO_NUMBER
VARCHAR2
八、小結
在本文中,應該已經(jīng)學會:
? 為顯式數(shù)據(jù)類型轉換和隱式數(shù)據(jù)類型轉換各舉一個例子? 從企業(yè)角度說明,為什么一種語言有內(nèi)置數(shù)據(jù)轉換功能很重要
? 構建正確應用 TO_CHAR、TO_NUMBER 和 TO_DATE單行函數(shù)生成所需結果的 SQL 查詢
? 應用適當?shù)娜掌诤?#xff08;或)字符格式樣式來生成所需的輸出
? 解釋 YYYY 和 RRRR 的用法,并應用 YYYY 和 RRRR正確返回存儲在數(shù)據(jù)庫中的年份
總結
以上是生活随笔為你收集整理的Oracle入门(十四C)之转换函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 匡正是什么意思 匡正的意思
- 下一篇: Oracle入门(十四D)之常规函数