mysql中if在oracle怎么用_MySql和Oracle的使用
本文檔是一個記錄文檔,會不定時更新使用過程中遇到的差異問題
本文檔記錄MySql和Oracle在使用中要注意的問題,也包括兩者使用上的差異問題
字符串拼接函數 CONCAT
MySql
MySql的 concat()函數可以拼接多個字符串,作用相當于Oracle中的||。在使用過程中要注意:在拼接多個字符串時:如果其中有null存在時,則拼接結果最終為null。所以在處理時,最好保證要拼接的所有字符串都不為null。例:
// 三字段拼接
CONCAT('T','ES','T') ----> 'TEST';
// 有NULL的情況
CONCAT('TE',null,'ST') ----> NULL
Oracle
Oracle也存在concat()函數,與MySql不同是只能進行兩個字符串的連接,當有多個字符串拼接時非常的不方便。不過,不存在MySql中有null拼接返回null的問題。因為它的繁瑣,所以在Oracle推薦使用||進行字符串拼接。例:
// 三字段拼接
CONCAT ( CONCAT('T', 'E'), 'ST') ----> 'TEST'
// 有NULL的情況
CONCAT ( 'TEST', null) ----> 'TEST'
NULL 處理
在查詢數據的時候,有的數據會出現一些空值。如果我們要處理這些空值,將其替換為默認值,那么就會用到下面這些函數。
Mysql
MySql中,可使用的函數有 ifnull(expr1,expr2) 以及 if(expr1,expr2,expr3)。
ifnull(expr1,expr2):若 expr1 為 null,則返回 expr2
if(expr1,expr2,expr3):若表達式 expr1 成立,返回 expr2,否則返回 expr3
// ifnull 函數
ifnull('測試', '有值') -----> '有值'
ifnull(null, '無值') -----> '無值'
// if 函數
if('測試', '值1', '值2') -----> '值1'
if(null, '值1', '值2') -----> '值2'
Oracle
Oracle中,可使用的函數有 NVL(expr1,expr1) 以及 NVL2(expr1,expr2,expr3)
NVL(expr1,expr1):若 expr1 為 null,則返回 expr2
NVL2(expr1,expr2,expr3):若表達式 expr1 成立,返回 expr2,否則返回 expr3
// NVL 函數
nvl('測試', '有值') -----> '有值'
nvl(null, '無值') -----> '無值'
// NVL2 函數
nvl2('測試', '值1', '值2') -----> '值1'
nvl2(null, '值1', '值2') -----> '值2'
獲取字符串長度
Mysql(5.0及以上版本)
獲取字符串長度有兩個函數 length(expr)、char_length(expr)
length(expr) 計算的是字符串所占的字節數。即數字和字母算一個字節,而漢字在不同的編碼格式下占的字節數不同。UTF8 編碼下,漢字占 3~4 個字節(一般的占3個,中日韓超大字符集的占4個),GBK編碼下占 2 個字節。
char_length(expr)計算的是所占的字符數,即漢字,字母,數字都是算一個字符。
可以利用 char_length(expr) = length(expr) 來判斷字符串中是否包含中文。
// UTF8 編碼下
length('123456') -----> 長度為 6
char_length('123456') -----> 長度為6
length('helle世界') -----> 長度為 11
char_length('hello世界') -----> 長度為 7
Oracle
同樣有兩個函數 length(expr)、lengthb(expr)。不同的是 length(expr) 計算字符數,而lengthb(expr)計算字節數
// UTF8 編碼下
length('123456') -----> 長度為 6
lengthb('123456') -----> 長度為6
length('hello世界') -----> 長度為 7
lengthb('helle世界') -----> 長度為 11
截取字符串
MySql
在 MySql 中常用的字符串截取函數如下:
left(str, length):從左開始。截取 length 個字符返回
right(str,length):從右開始。截取 length 個字符返回
substr(str,start,length):從左開始。以 start 為起始位,截取 length 個字符返回。(length可省略,省略情況下以 start 為起始位,返回剩余全部字符)
start 的取值可以是負值,此情況下 start 計算從右邊開始
substr 函數還有其他的變種,這里不再詳細描述,可自行了解
substring_index(str,delimiter,number):返回 str 中第 number 個出現的分隔符 delimiter 之前的子字符串。
當 number 是正數,計算和截取方式從左邊開始算 ---> 即左為前
當 number 是負數,計算和截取方式從右邊開始算 ---> 即右為前
// left
left('abcde', 2) ----> ab
// right
right('abcde', 3) ----> cde
// substr
substr('abcde', 3, 2) ----> cd
substr('abcde', 3) ----> cde
substr('abcde', -4, 3) ----> bcd
// substring_index
substring_index('a*b*c*d*e', '*', 2) -----> 'a*b'
substring_index('a*b*c*d*e', '*', -3) -----> 'c*d*e'
Oracle
Oracle 中字符串截取用到的函數有 substr 和 instr 這兩個,經常一起搭配使用
substr(str, start, [length]):從 start 位置開始,截取 length 個字符組成的子串并返回。
length 是可選值。
start 可為正也可為負。當 start 為負數時,其計算從右邊(末尾)開始
instr(str, child_str, [start], [show_time]):返回 child_str 子串在源串 str 中的位置
start 可選值。默認為 1,從左往右檢索。為負數時,從右往左檢索
show_time 可選值。子字符串在第幾次出現在源字符串中。默認為 1。
// substr
substr('abcde', 3, 2) ----> cd
substr('abcde', -2, 3) ----> de 因剩余長度不足 3,所以只截取到末尾
// instr
/*
* 從左邊位置 2 開始計算,返回 * 第二次出現的位置
*/
instr('a*b*c*d*e', '*', 2, 2) ----> 4
/*
* 從右邊位置開始算,返回 * 第二次出現的位置
*/
instr('a*b*c*d*e', '*', -2, 2) ----> 6
// 聯合運用
/**
* instr('a*b*c*d*e*f', '*', 2, 2) ----> 4
* substr('a*b*c*d*e*f', instr('a*b*c*d*e*f', '*', 2, 2), 3) ----> substr('a*b*c*d*e*f', 4, 3)
*/
substr('a*b*c*d*e*f', instr('a*b*c*d*e*f', '*', 2, 2), 3) ----> '*c*'
總結
以上是生活随笔為你收集整理的mysql中if在oracle怎么用_MySql和Oracle的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟草料上传二维码图片,得出识别结果(草
- 下一篇: mysql client centos_