自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

數(shù)據(jù)庫 其他數(shù)據(jù)庫
在MySQL跟Oracle中,如果存在隱式的數(shù)據(jù)類型轉(zhuǎn)換,可能導(dǎo)致無法命中索引,從而進(jìn)行全表掃描的危險(xiǎn)。

在某些情況下,Oracle Server 會(huì)收到數(shù)據(jù)類型與預(yù)期的數(shù)據(jù)類型不同的數(shù)據(jù)。發(fā)生這種情況時(shí),Oracle Server 可自動(dòng)將該數(shù)據(jù)轉(zhuǎn)換為預(yù)期的數(shù)據(jù)類型。這種數(shù)據(jù)類型轉(zhuǎn)換可以由Oracle Server 隱式完成,也可以由用戶顯式完成。

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

在MySQL跟Oracle中,如果存在隱式的數(shù)據(jù)類型轉(zhuǎn)換,可能導(dǎo)致無法命中索引,從而進(jìn)行全表掃描的危險(xiǎn)。

一、類型轉(zhuǎn)換規(guī)則

MySQL類型轉(zhuǎn)換規(guī)則:

  • 兩個(gè)參數(shù)至少有一個(gè)是NULL時(shí),比較的結(jié)果也是 NULL,例外是使用 <=> 對兩個(gè)NULL做比較時(shí)會(huì)返回1,這兩種情況都不需要做類型轉(zhuǎn)換
  • 兩個(gè)參數(shù)都是字符串,會(huì)按照字符串來比較,不做類型轉(zhuǎn)換
  • 兩個(gè)參數(shù)都是整數(shù),按照整數(shù)來比較,不做類型轉(zhuǎn)換
  • 十六進(jìn)制的值和非數(shù)字做比較時(shí),會(huì)被當(dāng)做二進(jìn)制串
  • 有一個(gè)參數(shù)是TIMESTAMP或DATETIME,并且另外一個(gè)參數(shù)是常量,常量會(huì)被轉(zhuǎn)換為timestamp
  • 所有其他情況下,兩個(gè)參數(shù)都會(huì)被轉(zhuǎn)換為浮點(diǎn)數(shù)再進(jìn)行比較

Oracle類型轉(zhuǎn)換規(guī)則:

  • 對于insert和update操作,oracle將值轉(zhuǎn)換為受影響的的列的類型。
  • 對于SELECT操作,oracle會(huì)將列的值的類型轉(zhuǎn)換為目標(biāo)變量的類型。

二、Oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

  • varchar2變長/char定長-->number,例如:'123'->123
  • varchar2/char-->date,例如:'25-4月-15'->'25-4月-15'
  • number---->varchar2/char,例如:123->'123'
  • date------>varchar2/char,例如:'25-4月-15'->'25-4月-15'

三、Oracle/MySQL如何隱式轉(zhuǎn)換

  • =號(hào)二邊的類型是否相同
  • 如果=號(hào)二邊的類型不同,嘗試的去做轉(zhuǎn)換
  • 在轉(zhuǎn)換時(shí),要確保合法合理,否則轉(zhuǎn)換會(huì)失敗,例如:12月不會(huì)有32天,一年中不會(huì)有13月

四、Oracle隱式轉(zhuǎn)換實(shí)例

(1) 查詢1980年12月17日入職的員工(方式一:日期隱示式轉(zhuǎn)換)

  1. select * from emp where hiredate = '17-12月-80'

(2) 使用to_char(日期,'格"常量"式')函數(shù)將日期轉(zhuǎn)成字符串)

  1. select to_char(sysdate,'yyyy" 年 "mm" 月 "dd" 日 "day') from dual; 

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

(3) 使用to_char(日期,'格式')函數(shù)將日期轉(zhuǎn)成字符串)

  1. select to_char(sysdate,'yyyy-mm-dd"今天是"day hh24:mi:ss') from dual; 

  1. select to_char(sysdate,'yyyy-mm-dd"今天是"day HH12:MI:SS AM') from dual; 

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

(4) 使用to_char(數(shù)值,'格式')函數(shù)將數(shù)值轉(zhuǎn)成字符串

  1. select to_char(1234,'$9,999') from dual;  
  2. select to_char(1234,'L9,999') from dual; 

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

(5) 使用to_date('字符串','格式')函數(shù),查詢1980年12月17日入職的員工(方式二:日期顯式轉(zhuǎn)換)

  1. select * from emp where hiredate = to_date('1980年12月17日','yyyy"年"mm"月"dd"日"'); 

  1. select * from emp where hiredate = to_date('1980#12#17','yyyy"#"mm"#"dd'); 

  1. select * from emp where hiredate = to_date('1980-12-17','yyyy-mm-dd'); 

(6) 使用to_number('字符串')函數(shù)將字符串‘123’轉(zhuǎn)成數(shù)字123

  1. select to_number('123') from dual; 

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

注意:

  1. select '123' + 123 from dual;246 
  2. select '123' || 123 from dual;123123 

詳解oracle中三大類型與隱式數(shù)據(jù)類型轉(zhuǎn)換

 

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2017-12-20 14:14:16

數(shù)據(jù)庫MySQL數(shù)據(jù)類型

2010-04-13 12:56:16

Oracle字符集

2017-09-13 10:58:51

JavaScript轉(zhuǎn)換規(guī)則

2017-09-05 16:17:35

JavaScript運(yùn)算轉(zhuǎn)換

2010-05-12 14:05:54

MySQL安裝

2010-03-30 16:33:55

Oracle數(shù)據(jù)類型

2019-11-29 07:37:44

Oracle數(shù)據(jù)庫索引

2025-02-27 09:13:03

2010-04-02 13:15:01

Oracle跟蹤

2010-04-21 15:10:14

Oracle數(shù)據(jù)類型

2009-11-17 10:01:11

Oracle數(shù)據(jù)類型

2010-06-17 23:31:35

協(xié)議轉(zhuǎn)換器

2023-08-14 08:35:36

2022-06-20 08:26:39

Spring容器類型轉(zhuǎn)換

2023-04-06 07:49:23

Python數(shù)據(jù)類型

2024-03-14 11:54:37

C++數(shù)據(jù)類型

2010-01-05 14:04:53

.NET Framew

2020-12-29 07:56:23

JavaScript數(shù)據(jù)類型 primitive

2011-04-13 09:16:55

泛型

2010-10-27 14:52:04

ORACLE數(shù)據(jù)類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)