資料庫SQL中的資料型別轉換
oracle提供的單行函式中,針對不同的資料型別,提供大量實用的函式,同時提供一系列資料型別轉換函式,如下:
sql.append(" select CURVE_NAME,S_YEAR_LIMIT,AVERAGE_VALUE,to_char(d_date,'yyyy-MM-dd') d_date from t_treasury_yield_curve t where d_date = to_date ('"+d_date+"','yyyy-MM-dd')");
24 小時的形式顯示出來要用 HH24select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
to_date() function
1. 日期格式引數 含義說明
D 一週中的星期幾
DAY 天的名字,使用空格填充到 9 個字元
DD 月中的第幾天
DDD 年中的第幾天
DY 天的簡寫名
IW ISO 標準的年中的第幾周
IYYY ISO 標準的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最後三位,兩位,一位
HH 小時,按 12 小時計
HH24 小時,按 24 小時計
MI 分
SS 秒
MM 月
Mon 月份的簡寫
Month 月份的全名
W 該月的第幾個星期
WW 年中的第幾個星期 1. 日期時間間隔操作
當前時間減去 7 分鐘的時間
select sysdate,sysdate - interval '7' MINUTE from dual
當前時間減去 7 小時的時間
select sysdate - interval '7' hour from dual
當前時間減去 7 天的時間
select sysdate - interval '7' day from dual
當前時間減去 7 月的時間
select sysdate,sysdate - interval '7' month from dual
當前時間減去 7 年的時間
select sysdate,sysdate - interval '7' year from dual
時間間隔乘以一個數字
select sysdate,sysdate - 8 *interval '2' hour from dual
2. 日期到字元操作
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual
參考 oracle 的相關關文件 (ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3. 字元到日期操作
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
具體用法和上面的 to_char 差不多。
4.TO_NUMBER
使用TO_NUMBER函式將字元轉換為數字
TO_NUMBER(char[, '格式'])
數字格式格式
9 代表一個數字
0 強制顯示0
$ 放置一個$符
L 放置一個浮動本地貨幣符
. 顯示小數點
, 顯示千位指示符
oracle中的to_date引數含義
1.日期格式引數含義說明
D 一週中的星期幾
DAY 天的名字,使用空格填充到9個字元
DD 月中的第幾天
DDD 年中的第幾天
DY 天的簡寫名
IW ISO標準的年中的第幾周
IYYY ISO標準的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最後三位,兩位,一位
HH 小時,按12小時計
HH24 小時,按24小時計
MI 分
SS 秒
MM 月
Mon 月份的簡寫
Month 月份的全名
W 該月的第幾個星期
WW 年中的第幾個星期 1.日期時間間隔操作
當前時間減去7分鐘的時間
select sysdate,sysdate - interval ’7’ MINUTE from dual
當前時間減去7小時的時間
select sysdate - interval ’7’ hour from dual
當前時間減去7天的時間
select sysdate - interval ’7’ day from dual
當前時間減去7月的時間
select sysdate,sysdate - interval ’7’ month from dual
當前時間減去7年的時間
select sysdate,sysdate - interval ’7’ year from dual
時間間隔乘以一個數字
select sysdate,sysdate - 8 *interval ’2’ hour from dual
2.日期到字元操作
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual
參考oracle的相關關文件(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3. 字元到日期操作
select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual
具體用法和上面的to_char差不多。
4. trunk/ ROUND函式的使用
select trunc(sysdate ,’YEAR’) from dual
select trunc(sysdate ) from dual
select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual
5.oracle有毫秒級的資料型別
--返回當前時間 年月日小時分秒毫秒
select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
--返回當前時間的秒毫秒,可以指定秒後面的精度(最大=9)
select to_char(current_timestamp(9),’MI:SSxFF’) from dual;
6.計算程式執行的時間(ms)
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for I in 1 .. 1000
loop
open l_rc for
’select object_name from all_objects ’||
’where object_id = ’ || i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
’ seconds ...’ );
end;
(以下部分轉自網路) 1)to_char
數值、日期->字元型
語法:to_char(num|date,[format mask],[nls_parameters])
引數:num|date 待轉換的數值或者日期
format mask:可選引數
數字->字元型的可用格式
格式元素
元素說明
格式
數字
字元結果
9
數字寬度
9999
12
12
0
顯示前面的零
09999
0012
00012
.
小數點的位置
09999.999
030.40
00030.400
D
小數點分隔符的位置(預設為句點)
09999D999
030.40
00030.400
,
逗號的位置
09999,999
03040
00003,040
G
組分隔符的位置(預設為逗號)
09999G999
03040
00003,040
$
美元符號
$099999
03040
$003040
L
當地貨幣
L099999
03040
GBP003040如果nls_currency設定為GBP
MI
表示負數的減號的位置
99999MI
-3040
3040-
PR
包圍在括號內的負數
99999PR
-3040
<3040>
EEEE
科學計數法
99.99999EEEE
121.976
1.21976E+02
U
Nls_dual_currency
U099999
03040
CAD003040如果nls_dual_currency設定為CAD
V
乘以10n次(n是V之後9的數量)
9999V99
3040
304000
S
前面加上+或者-
S999999
3040
+3040
日期->字元型的可用格式(示例日期:02-JUN-1975)
格式說明
說明
結果
Y
年的最後一位
5
YY
年的最後兩位
75
YYY
年的最後三位
975
YYYY
四位數字表示的年
1975
RR
兩位數字表示的年
75
YEAR
區別大小寫並用英語拼寫的年
NINETEEN SEVENTY-FIVE
MM
兩位數表示的月
06
MON
月的三個字母縮寫
JUN
MONTH
區分大小寫並用英語拼寫的月
JUNE
D
星期幾
2
DD
月的兩位數日(即是本月的第幾天)
02
DDD
年的日
153
DY
星期的三個字母縮寫
MON
DAY
區分大小寫並用英語拼寫的星期
MONDAY
其他不常用的格式掩碼
演示資料:24-SEP-1000 BC
格式元素
說明
結果
W
月的週數
4
WW
年的週數
39
Q
年的季度
3
CC
世紀
10
S preceding CC,YYYY,YEAR
如果日期是BC,那麼減號就在結果之前
-10,-1000或者-ONE THOUSAND
IYYY,IYY,IY,I
分別表示4,3,2,1為ISO日期
1000,000,00,0
BC,AD,B.C. and A.D.
J
儒略日—從公元前4713年12月31日開始的天數
1356075
IW
ISO標準周(1到53)
39
RM
用羅馬數字表示的月
IX
時間元件的日期格式掩碼
演示資料:27-JUN-2010 21:35:13
格式元素
說明
結果
AM,PM,A.M.和P.M.
子午線指示器
PM
HH,HH12,HH24
一天的小時,1-12時和0-23時
09,09,21
MI
分(0-59)
35
SS
秒(0-59)
12
SSSSS
午夜之後的秒(0-86399)
77713
其他日期格式掩碼
格式元素
說明和格式掩碼
結果
-/.,?#!
標點符號:’MM.YY’
09.08
“any character literal”
字元值:’”Week” W “”of” Month’
Week 2 of September
TH
位置或者序數文字:’DDth”of”Month’
12TH of September
SP
拼寫出數字:’MmSP Month YYYYSP’
Nine September Two Thousand Eight
THSP or SPTH
拼寫出位置或者序數:’hh24SpTh’
Fourteenth
2)to_date
字元值->日期值
語法:to_date (string,[format mask],[nls_parameters])
引數:string 待轉換的字元值
format mask:可選引數 ,格式掩碼同to_char轉換為date時相同。
備註:轉換時要根據給定的string設定正確的格式掩碼,否則
Ora_01840:input value is not long enough for date format.
Ora_01862:the numeric value does not match the length of the format item.
3) to_number
字元值->數字值
語法:to_number (string,[format mask],[nls_parameters])
引數:string 待轉換的字元值
format mask:可選引數,格式掩碼同to_char轉換為number時相同。
備註:如果使用較短的格式掩碼就會返回錯誤。
例如: to_number(123.56,’999.9’)返回錯誤。
在oracle中,如果不同的資料型別之間關聯,如果不顯式轉換資料,則它會根據以下規則對資料進行隱式轉換
1) 對於INSERT和UPDATE操作,oracle會把插入值或者更新值隱式轉換為欄位的資料型別。
假如id列的資料型別為number
update t set id='1'; -> 相當於 update t set id=to_number('1');
insert into t(id) values('1') -> insert into t values(to_number('1'));
2) 對於SELECT語句,oracle會把欄位的資料型別隱式轉換為變數的資料型別。
如假設id列的資料型別為varchar2
select * from t where id=1; -> select * from t where to_number(id)=1;
但如果id列的資料型別為number,則
select * from t where id='1'; -> select * from t where id=to_number('1');(參考下文)
3) 當比較一個字元型和數值型的值時,oracle會把字元型的值隱式轉換為數值型。
如假設id列的資料型別為number
select * from t where id='1'; -> select * from t where id=to_number('1');
4) 當比較字元型和日期型的資料時,oracle會把字元型轉換為日期型。
如假設create_date為字元型,
select * from t where create_date>sysdate; -> select * from t where to_date(create_date)>sysdate;(注意,此時session的nls_date_format需要與字串格式相符)
假設create_date為date型,
select * from t where create_date>'2006-11-11 11:11:11'; -> select * from t where create_date>to_date('2006-11-11 11:11:11'); (注意,此時session的nls_date_format需要與字串格式相符)
5) 如果呼叫函式或過程等時,如果輸入引數的資料型別與函式或者過程定義的引數資料型別不一直,則oracle會把輸入引數的資料型別轉換為函式或者過程定義的資料型別。
如假設過程如下定義 p(p_1 number)
exec p('1'); -> exec p(to_number('1')); 6)
賦值時,oracle會把等號右邊的資料型別轉換為左邊的資料型別。
如 var a number a:='1'; - > a:=to_number('1');
6) 用連線操作符(||)時,oracle會把非字元型別的資料轉換為字元型別。
select 1||'2' from dual; -> select to_char(1)||'2' from dual;
7) 如果字元型別的資料和非字元型別的資料(如number、date、rowid等)作算術運算,則oracle會將字元型別的資料轉換為合適的資料型別,這些資料型別可能是number、date、rowid等。
如果CHAR/VARCHAR2 和NCHAR/NVARCHAR2之間作算術運算,
則oracle會將她們都轉換為number型別的資料再做比較。
8) 比較CHAR/VARCHAR2 和NCHAR/NVARCHAR2時,如果兩者字符集不一樣,則預設的轉換方式是將資料編碼從資料庫字符集轉換為國家字符集。
相關推薦
VHDL中資料型別轉換與移位(STD_LOGIC_ARITH與NUMERIC_STD)
1. VHDL目前常用庫檔案 目前寫VHDL程式時,大部分人已經熟悉的庫呼叫如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsi
JavaScript中資料型別轉換
在js中,資料型別轉換分為顯式資料型別轉換和隱式資料型別轉換。 1, 顯式資料型別轉換 a:轉數字: 1)Number轉換: 程式碼: var a = “123”; a = Number(a); 注意: a) 如果轉
在Talend 的tMap元件中資料型別轉換函式總結(一)
1.1 字串與數值型別相互轉換 1.1.1 字串轉為浮點型、整形 1)Float.parseFloat(row3.working_time ) Float.valueOf(String s) Float.valueOf(int s) 2)Integer.pars
Arduino中資料型別轉換 float/double轉換為char 親測好使,dtostrf()函式
如何輕鬆玩轉Arduino微控制器,當我在進行資料轉換的時候,遇到了問題,嘗試了C語言和C++中的好多函式,都沒有達到將float型資料轉換為char型的目的。苦苦查閱資料後,終於找到了一
js中資料型別轉換的三種方法 重要
方法主要有三種 轉換函式、強制型別轉換、利用js變數弱型別轉換。 1. 轉換函式: js提供了parseInt()和parseFloat()兩個轉換函式。前者把值轉換成整數,後者把值轉換成浮點數。只有對String型別呼叫這些方法,這兩個函式才能正確執行;對其他型別返回的都是NaN(Not a Nu
vba中資料型別轉換函式
轉換函式 CBool(expression) 轉換為Boolean型 CByte(expression) 轉換為Byte型 CCur(expression) 轉換為Curr
python中資料型別轉換的使用
常用的資料型別轉換 函式 說明 int(x [,base ]) 將x轉換為一個整數 long(x [,base ]) 將x轉換為一個長整數(注意python3中沒有long了
ACCESS sql語句資料型別轉換 文字型別轉換為數字型別
string sql = "select top 5 * from Dcms_Intro where Intro_CateId=931 order by cint(Intro_ExFlag5) desc " ;// 這
java中資料型別轉換
1如何將字串 String 轉換成整數 int? A. 有兩個方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(m
資料庫SQL中的資料型別轉換
oracle有三種最基本的資料型別,即字元型、數值型、日期型。 (注意需要起別名的地方要起別名) oracle提供的單行函式中,針對不同的資料型別,提供大量實用的函式,同時提供一系列資料型別轉換函式,如下: sql.append(" select CURVE_NAME,S_
SQL資料庫中資料型別ntext和text的區別
4、NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個“N”。它表示儲存的是Unicode資料型別的字元。我們知道字元中,英文字元只需要一個位元組儲存就足夠了,但漢字眾多,需要兩個位元組儲存,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不相容的問題而產生
java中的基本資料型別轉換
1.java中的基本資料型別轉換 java基本資料型別的轉換是需要兩個基本事項: 1.boolean型不進行型別轉換。 2.Java中基本資料型別按精度從“低”到“高”排列順序 byte short char int&
matlab中圖片資料型別轉換uint8與double
matlab中處理影象畫素點資料: img1=double(imread('lenna.bmp')); matlab中imshow圖片,要先轉換成uint8: subplot(1,2,1),imshow(uint8(img1)),title('original');subplot(1,2,2),imsh
Android中JNI使用詳解(4)---Java與C之間資料型別轉換
Jni中基本型別轉換對應的表格 Java型別 本地型別 說明 boolean jboolean 無符號,8位 byte jbyte
java筆試題:關於short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的簡單資料型別轉換問題的理解
面試題的內容大概是這樣:short s1=1;s1=s1+1;這兩句程式碼有什麼問題?short s1=1;s1+=1;這兩句程式碼有什麼問題?short s1=1,s2=1;short s3=s1+s2;這兩句程式碼有什麼問題? 下面我就對這三個問題按照自己的理解以及參考做出解釋: 解釋之
SQLServer之資料庫型別對應Java中資料型別
SQL Server 型別 JDBC 型別 (java.sql.Types) Java 語言型別 bigint BIGINT long timestamp binary
Python中的資料型別轉換舉例及指令碼統計伺服器記憶體例項
統計系統剩餘的記憶體 In [1]: s1 = 'abc' In [2]: help(s1.startswith) Hel
演算法設計中常用的規律性資料型別轉換
案例一: 1/2 錯誤寫法: double a= 1/2 正確寫法: double a=1/2*1.0; 答案為0.5 案例二: 字元轉int &nbs
Python(5)_Python中的資料型別轉換
自動型別轉換 # 自動型別轉換,隱式轉換 # 不需要人工干預 # 自動型別轉換多發生在運算或者是判斷過程當中 intval = 123 floatval = 11.1 result = intval*floatval print(result) #if 語句 if True: print(1
Java中資料型別的轉換
/** * 資料型別的相互轉換 * */ public class DataTypeTranfer { public static void main(String[] args) { /** * 每個型別額轉換都有不止一種方式轉換 * 在我認為最方便的就是裝箱拆箱轉換。把