SQL Server 和 MySql 语法和关键字的区别
(1)????MySQL的ifnull()函數(shù)對(duì)應(yīng)sql的isnull()函數(shù);
?
(2)????mysql的存儲(chǔ)過程中變量的定義去掉@;
?
(3)????mysql的每句結(jié)束要用";"
?
(4)????SQLServer存儲(chǔ)過程的AS在MySql中需要用begin .....end替換
?
(5)????字符竄連接用concat()函數(shù);
如?SQLServer: Temp=’select * from ’+’tablename’+…+…
??MySql:Temp=concat(’select * from’, ’tablecname’,…,…)
?
(6)????mysql的uuid()對(duì)應(yīng)sql的GUID();
?
(7)????MySql的out對(duì)應(yīng)SQLServer的output,且mysql?的out要放在變量的前面,SQLServer的output放在變量后面
?
MySql out,in,inout的區(qū)別——
MySQL?存儲(chǔ)過程?“in”?參數(shù):跟?C?語言的函數(shù)參數(shù)的值傳遞類似,?MySQL?存儲(chǔ)過程內(nèi)部可能會(huì)修改此參數(shù),但對(duì)?in?類型參數(shù)的修改,對(duì)調(diào)用者(caller)來說是不可見的(not visible)。
?
MySQL?存儲(chǔ)過程?“out”?參數(shù):從存儲(chǔ)過程內(nèi)部傳值給調(diào)用者。在存儲(chǔ)過程內(nèi)部,該參數(shù)初始值為?null,無論調(diào)用者是否給存儲(chǔ)過程參數(shù)設(shè)置值。
?
MySQL?存儲(chǔ)過程?inout?參數(shù)跟?out?類似,都可以從存儲(chǔ)過程內(nèi)部傳值給調(diào)用者。不同的是:調(diào)用者還可以通過?inout?參數(shù)傳遞值給存儲(chǔ)過程。
?
(8)MySQL的if語句為
if??(條件)??then
end if;
或者
???????If??(條件) then
???????Else
???????End if
或者
???????If(條件)then
???????Elseif??????(注意不能寫成?Else if?)
???????Elseif
???????…
???????End if
?
(9)Mysql的Execute對(duì)應(yīng)SqlServer的exec;
???????(注意:必須想下面這樣調(diào)用)
???????Set @cnt=’select * from?表名’;
???????Prepare str from @cnt;
???????Execute str;
?
(10)MySql存儲(chǔ)過程調(diào)用其他存儲(chǔ)過程用call
???????Call?函數(shù)名(即SQLServer的存儲(chǔ)過程名)(’參數(shù)1’,’參數(shù)2’,……)
?
(11)?mysql的日期
???????1獲得當(dāng)前日期函數(shù):curdate(),current_date()
???????2獲得當(dāng)前時(shí)間函數(shù):curtime();
???????3獲得當(dāng)前日期+時(shí)間:now();
4MySQL dayof...?函數(shù):dayofweek(), dayofmonth(), dayofyear()分別返回日期參數(shù),在一周、一月、一年中的位置。
(注:周日=1,周一=2,周二=3,……)
?
???????5返回本月的天數(shù):select day(last_day(now()));
??????
???????6MySQL?為日期增加一個(gè)時(shí)間間隔:date_add()
???????select date_add(CURRENT_DATE(),interval?‘要增加的天數(shù)’?day) as Fdate
????7MySQL?為日期減去一個(gè)時(shí)間間隔:date_sub()
???????select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
???????8MySQL?日期、時(shí)間相減函數(shù):datediff(date1,date2), timediff(time1,time2)
9MySQL?拼湊日期、時(shí)間函數(shù):makdedate(year,dayofyear), maketime(hour,minute,second)
例:select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
10本周時(shí)間(起始)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-2 day) as Fdate
11本周時(shí)間(結(jié)束)
select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3 day) as Fdate
12上周時(shí)間(起始)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5 day) as Fdate
13上周時(shí)間(結(jié)束)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1 day) as Fdate
14本月時(shí)間(起始)
select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) as Fdate
15本月時(shí)間(結(jié)束)
Select date_add(current_date(),interval day(last_day(CURDATE())) -day(CURDATE()) day) as Fdate
16上月時(shí)間(起始)
select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY)))-1 day) as Fdate
17上月時(shí)間(結(jié)束)
select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY) as Fdate
18今年時(shí)間(起始)
select makedate(year(curdate()),1) as FDate
19今年時(shí)間(結(jié)束)
select DATE_SUB(makedate(year(curdate())+1,1) ,INTERVAL 1 day) as Fdate
20去年時(shí)間(起始)
select makedate(year(curdate())-1,1) as Fdate
21去年時(shí)間(結(jié)束)
select DATE_SUB(makedate(year(curdate()),1) ,INTERVAL 1 day) as FDate
22DATE_FORMAT(date,format):根據(jù)format字符串格式化date值。下列修飾符可以被用在format字符串中
%M ? ??月名字(January……December) ? ? ??
???????%W ? ??星期名字(Sunday……Saturday) ? ? ??
???????%D ? ??有英語前綴的月份的日期(1st, ? 2nd, ? 3rd, ??等等。)?? ??
???????%Y ? ??年, ??數(shù)字, ? 4 ??位?? ??
???????%y ? ??年, ??數(shù)字, ? 2 ??位?? ??
???????%a ? ??縮寫的星期名字(Sun……Sat) ? ? ??
???????%d ? ??月份中的天數(shù), ??數(shù)字(00……31) ? ? ??
???????%e ? ??月份中的天數(shù), ??數(shù)字(0……31) ? ? ??
???????%m ? ??月, ??數(shù)字(01……12) ? ? ??
???????%c ? ??月, ??數(shù)字(1……12) ? ? ??
???????%b ? ??縮寫的月份名字(Jan……Dec) ? ? ??
???????%j ? ??一年中的天數(shù)(001……366) ? ? ??
???????%H ? ??小時(shí)(00……23) ? ? ??
???????%k ? ??小時(shí)(0……23) ? ? ??
???????%h ? ??小時(shí)(01……12) ? ? ??
???????%I ? ??小時(shí)(01……12) ? ? ??
???????%l ? ??小時(shí)(1……12) ? ? ??
???????%i ? ??分鐘, ??數(shù)字(00……59) ? ? ??
???????%r ? ??時(shí)間,12 ??小時(shí)(hh:mm:ss ? [AP]M) ? ? ??
???????%T ? ??時(shí)間,24 ??小時(shí)(hh:mm:ss) ? ? ??
???????%S ? ??秒(00……59) ? ? ??
???????%s ? ??秒(00……59) ? ? ??
???????%p ? ? AM或PM ? ? ?
%w ? ??一個(gè)星期中的天數(shù)(0=Sunday ? ……6=Saturday ??)?? ??
???????%U ? ??星期(0……52), ??這里星期天是星期的第一天?? ??
???????%u ? ??星期(0……52), ??這里星期一是星期的第一天?? ??
???????%% ? ??一個(gè)文字“%”。?? ?
例:所有的其他字符不做解釋被復(fù)制到結(jié)果中。?? ?
???????mysql> select ? DATE_FORMAT('1997-10-04?? 22:23:00', ? '%W ? %M ? %Y'); ??
???????->'Saturday ? October ? 1997' ??
???????mysql>select ? DATE_FORMAT('1997-10-04?? 22:23:00', ? '%H:%i:%s'); ?
-> ? '22:23:00' ?
mysql>select ? DATE_FORMAT('1997-10-04?? 22:23:00', ? '%D ? %y ? %a ? %d ? %m ? %b ? %j'); ?
->'4th ? 97 ? Sat ? 04 ? 10 ? Oct ? 277' ?
mysql>select ? DATE_FORMAT('1997-10-04?? 22:23:00', ? '%H ? %k ? %I ? %r ? %T ? %S ???????%w'); ?
->'22 ? 22 ? 10 ? 10:23:00 ? PM ? 22:23:00 ? 00 ? 6' ?
(12)MySql存儲(chǔ)過程中沒有return函數(shù),在MySql中可以用循環(huán)和out參數(shù)代替
???????If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID)??return 0
改寫為:
???????(在參數(shù)中定義一個(gè)out變量:out temp varchar(100);)
??????????????BEGIN
??????????????Loop1:loop
???????SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt
???????If @cnt>0 then
???????begin
??????????????set temp=0;
??????????????leave loop1;
???????end;
???????end if
???????end loop loop1;
?
(13)?select @a=count(*) from VW_Action?在mySql中修改為:select count(*) from VW_Action into @a;
?
(14)MySQL中沒有top關(guān)鍵字,需要用limit代替且放在后面
???????注意,在MySQL中的limit不能放在子查詢內(nèi),limit不同與SQLServer,它可以規(guī)定范圍?limit a,b——范圍a-b
SQL SERVER : select???top???8???*???from???table1
MYSQL: select???*???from???table1???limit???5;
(15)即使存儲(chǔ)過程沒有參數(shù)也要寫括號(hào)“()”
(16)?當(dāng)一個(gè)存儲(chǔ)過程中有創(chuàng)建臨時(shí)表時(shí)
create procedure up_test
()
begin
drop table if exists tb1;
create TEMPORARY table tb1//注意添加TEMPORARY table
(
id int,
name varchar(20)
);//注意最后加分號(hào)
insert tb1 values('1','jim');
select * from tb1;
end
(17)建表中自增長問題:
create table user
(
??Id???????????????????????????????????????????varchar(10)??primary key?????auto_increment??not null,
??Name?????????????????????????????????????varchar(20)??????????????????????????not null,
??Password????????????????????????????????varchar(20),
??create_date??????????????????????????????datetime
);
auto_increment?自增長
(18)?"Unable to convert MySQL date/time value to System.DateTime"這是因?yàn)樵谌掌诹兄杏?#34;0000-00-00"數(shù)據(jù)值,要修正這個(gè)問題,你可以把這些數(shù)據(jù)設(shè)為null,或者在連接字符串中設(shè)置"Allow Zero Datetime=True"?。
(19)?MySQL視圖的FROM子句不允許存在子查詢,因此對(duì)于SQL Server中FROM子句帶有子查詢的視圖,需要手工進(jìn)行遷移。可通過消除FROM子句中的子查詢,或?qū)ROM子句中的子查詢重構(gòu)為一個(gè)新的視圖來進(jìn)行遷移。
from:?http://blog.csdn.net/weiwangchao_/article/details/17286845
總結(jié)
以上是生活随笔為你收集整理的SQL Server 和 MySql 语法和关键字的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL查看表结构的实际操作命令简介
- 下一篇: mysql高效索引之覆盖索引