-最近在更換資料庫,在改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...