SQL的IF語句與case when then

2021-08-29 04:57:18 字數 2328 閱讀 2495

mysql的if既可以作為表示式用,也可在儲存過程中作為流程控制語句使用,如下是做為表示式使用:

if(expr1,expr2,expr3)
如果 expr1 是true (expr1 <> 0 and expr1 <> null),則 if()的返回值為expr2; 否則返回值則為 expr3。if() 的返回值為數字值或字串值,具體情況視其所在語境而定。

select if(sva=1,"男","女") as s from table_name 

where sva != '';

select case sva

when 1 then '男'

else '女'

end as s

from table_name

where sva != '';

在第乙個方案的返回結果中, value=compare-value。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為else後的結果,如果沒有else 部分,則返回值為 null。

例如:

select case 1 

when 1 then 'one'

when 2 then 'two'

else 'more'

end as test

將輸出one

假如expr1 不為 null,則 ifnull() 的返回值為 expr1; 否則其返回值為 expr2。ifnull()的返回值是數字或是字串,具體情況取決於其所使用的語境。

select ifnull(1,0);

-> 1

select ifnull(null,10);

-> 10

select ifnull(1/0,10);

-> 10

select ifnull(1/0,'yes');

-> 'yes'

ifnull(expr1,expr2)的預設結果值為兩個表示式中更加「通用」的乙個,順序為string、 real或 integer。

if實現條件判斷,滿足不同條件執行不同的操作,這個我們只要學程式設計的都知道if的作用了,下面我們來看看mysql 儲存過程中的if是如何使用的吧。

if search_condition 

then statement_list

[elseif search_condition then]

statement_list ...

[else statement_list]

end if

與php中的if語句類似,當if中條件search_condition成立時,執行then後的statement_list語句,否則判斷elseif中的條件,成立則執行其後的statement_list語句,否則繼續判斷其他分支。當所有分支的條件均不成立時,執行else分支。search_condition是乙個條件表示式,可以由「=、、>=、!=」等條件運算子組成,並且可以使用and、or、not對多個表示式進行組合。

例如,建立乙個儲存過程,該儲存過程通過學生學號(student_no)和課程編號(course_no)查詢其成績(grade),返回成績和成績的等級,成績大於90分的為a級,小於90分大於等於80分的為b級,小於80分大於等於70分的為c級,依次到e級。那麼,建立儲存過程的**如下:

create procedure dbname.proc_getgrade  

(stu_no varchar(20),cour_no varchar(10))

begin

declare stu_grade float;

select grade into stu_grade from grade

where student_no=stu_no and course_no=cour_no;

if stu_grade>=90 then

select stu_grade,'a';

elseif stu_grade<90 and stu_grade>=80 then

select stu_grade,'b';

elseif stu_grade<80 and stu_grade>=70 then

select stu_grade,'c';

elseif stu_grade70 and stu_grade>=60 then

select stu_grade,'d';

else

select stu_grade,'e';

end if;

end

SQL語句斷行與縮排

我來簡單的介紹一下開發原則 1 sql語句中的 from select union where 遇到這些關鍵字會自動換行,如果有巢狀會自動縮排。2 select 部分很長的話也會自動換行,case部分也會自動換行。程式中有3個檔案 breaksqlcmd.exe 命令列工具 breaksqlui.e...

Mongodb 與sql 語句對照

此處用mysql中的sql語句做例子,c 驅動用的是samus,也就是上文中介紹的第一種.引入專案mongodb.dll var mongo new mongo mongodb localhost mongo.connect 獲取乙個資料庫,如果沒有會自動建立乙個var db mongo.getda...

sql語句與mysql MySQL sql語句

mysql varchar型別字段 0取出的是什麼 偶然發現乙個奇葩問題,varchar型別字段 0取出的東西什麼都有,有中文,有數字字母組合,但是卻不是全集,這是怎麼回事?當比較數字和varchar時,mysql會把varchar轉換為數字,首字元為數字0的,或者其他字元的都會轉換為0,varch...