由于最近博主公司最近在把系統從sqlserver版本轉成mysql版本,所以博主最近就在做sql陳述句的轉換,在這之中遇到了很多sql函式的問題,很多都是sqlserver擁有的在mysql中卻沒有,
1、分頁, sqlserver : top, mysql :limit,
top的用法是 select top 1 * from a表
limit的用法是 select * from a表 limit 0,1
2、convert函式
sqlserver中語法是 convert(nvarchar,引數,121)
mysql中語法是 convert(引數,char)
在這里特別注意一下,mysql中它的資料型別被限制了,不是我不用nvarchar而是nvarchar不能用
以下是mysql的convert可使用的幾種資料型別,這里要謹記
二進制,同帶binary前綴的效果 : BINARY
字符型,可帶引數 : CHAR()
日期 : DATE
時間: TIME
日期時間型 : DATETIME
浮點 : DECIMAL
整數 : SIGNED
無符號整數 : UNSIGNED
3、cast函式
sqlserver的cast有兩種寫法 cast(引數 as 型別) , cast(引數 ,型別)
mysql的cast只有一種寫法 cast(引數 as 型別)
4、isnull,ifnull函式
sqlserver中就只存在isnull這一個函式,語法是 isnull(a引數,b引數),引數可以是任意資料,甚至可以是列
其實意思就是判斷a引數是否為null,如果a引數為null,那么就會顯示b引數,不為null就顯示a引數
mysql的isnull語法就是 isnull(a引數)同樣是判斷a引數是否為null,不同的是在return,如果為null則return 1,否則return 0
ifnull(a引數,b引數)意思就和sqlserver中的isnull一樣的用法了
5、dateadd,date_add函式
看名字就知道,就是時間增加當然也可以是縮減,用負數就好了
dateadd(日期格式,增刪的天數,時間) 這個函式是sqlserver版本的
date_add(時間,interval 增刪的天數 日期),寫的不是很明白啊 舉個栗子 date_add(2020-10-21,interval 2 day)
return 出來的值就是 2020-10-23
這回懂了吧,那么既然dateadd是sqlserver版本的,那么date_add就是mysql版本的
6、序列號
sqlserver版本的序列號有個很簡單的函式 row_number() over()
select row_number(列) over(列) ,列 from a表
但是mysql版本的序列號要自己寫函式定義
就比如 set @i=0; select (@i:=@i+1) as a , 列 from a表 這樣子
7、行轉列
sqlserver中的函式是 pivot
select *
from
(
SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN
(SELECT objid FROM T_MyAttention tma GROUP BY objid ORDER BY count(1) DESC)
GROUP BY objid,action
) t
pivot ( sum(count) for t.action in ([1],[2],[3],[4])) as ourpivot
mysql中又是一個需要自己手寫的玩意,在這里我教大家怎么寫這玩意
首先關注點在pivot函式,所以先看括號里的,它是sum函式開頭,那我也是sum函式開頭
SUM(CASE t.action when '1' then ifnull(t.count , '') else null end )as ‘1’
它的pivot是寫在最后面的,有沒有發現連表都沒有連,沒錯,而我們就需要連表了,同樣的其實就不需要select * from這一個階段了,然后我上面貼出來的那段直接寫在select 里面用來查詢出來,需要注意的點是 pivot里面不是有in嗎,它in幾個你就要寫行上面的代碼,
就暫時只更新以上這么多,如果對博主感興趣的,覺得博主寫的不錯的可以關注博主的微信公眾號
微信公眾號名稱 : 卑微程式員的求生路
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186515.html
標籤:其他
上一篇:登錄OEM錯誤 java.lang.Exception: Exception in sending Request :: null 解決方案
