Mysql中不支援的Oracle函式

2021-08-10 20:47:56 字數 1677 閱讀 5730

-最近在更換資料庫,在改sql的時候有些oracle中的函式在mysql中不支援,記錄一下。

1.oracle中的nvl(字段,替代值):此函式的意義為如果欄位是null那麼就用替代值代替這個空欄位對應的值:

select nvl(age,』18』) as age from user;

這裡面如果某個人的age欄位對應的值為null那麼就把他的age以18來代替。

那麼這個函式在mysql中是不支援的,此時有乙個類似的函式可以供我們選擇使用,就是ifnull(字段,替代值)

select ifnull(age,』18』) as age from user;

類似的如果某個人的age欄位對應的值為null那麼就把他的age以18來代替。

2.oracle中的decode(判斷式,情況1,結果1,情況2,結果2,預設default)函式:

select decode(gender,1,』男』,0,』女』,』中性』) as 『性別』 from user;

此函式的意思是判斷gender的值,如果值等於1那麼對應的』性別』就是男,如果值等於0那麼』性別』就是女,否則就是』中性』。

mysql中是沒有這個函式的,需要通過case when ..then..else..end來實現:

select case gender when 1 then 『男』 when 0 then 『女』 else 『中性』 end as 『性別』 from user;

類似的此函式的意思是判斷gender的值,如果值等於1那麼對應的』性別』就是男,如果值等於0那麼』性別』就是女,否則就是』中性』。

3.oracle的字串轉日期函式to_date(『20171101』, 『yyyymmdd』)在mysql對應的是str_to_date(『20171101』,』%y%m%d』)或date_format(『20171101』,』%y%m%d』)

注意格式化的字串要和後面的型別格式相同,如(『2017-11-01』,』%y-%m-%d』)

%y:代表4位的年份

%y:代表2為的年份

%m:代表月, 格式為(01……12)

%c:代表月, 格式為(1……12)

%d:代表月份中的天數,格式為(00……31)

%e:代表月份中的天數, 格式為(0……31)

%h:代表小時,格式為(00……23)

%k:代表 小時,格式為(0……23)

%h: 代表小時,格式為(01……12)

%i: 代表小時,格式為(01……12)

%l :代表小時,格式為(1……12)

%i: 代表分鐘, 格式為(00……59)

%r:代表 時間,格式為12 小時(hh:mm:ss [ap]m)

%t:代表 時間,格式為24 小時(hh:mm:ss)

%s:代表 秒,格式為(00……59)

%s:代表 秒,格式為(00……59)

未完待續……

mysql不支援 MySQL不支援的特性

mysql 1 不支援物化檢視。2 不支援位圖索引。3 不支援並行查詢。4 不支援雜湊關聯,mysql的所有關聯都是巢狀迴圈關聯。不過,可以通過建立乙個雜湊索引來曲線實現。5 不允許對同一表同時進行查詢和更新。報錯 update tb1 as outer tb1 set cnt select cou...

mysql不支援top 支援limit

今天偶爾發現mysql居然不支援top語句,之前用hibernate記得用過top語句。原因是 mysql的確是不支援top語句,之前用的是hql語句,是hibernate幫你翻譯成mysql支援的語句的。通常hibernate的用法 select top 5 id,name,password fr...

MySQL不支援動態表名

今天寫乙個資料遷移的儲存過程,用到了動態表名,發現mysql不支援直接使用變數做表名。然後就用下面的方式來做了。drop procedure if exists p transfer data delimiter create procedure p transfer data begin decl...