SQL語句中CASE有哪些用法
在寫SQL語句時,或者是在PL/SQL中,經常需要在一個SQL語句中,根據不同的條件,有多種處理方法,如簡單例子:出售一種商品時,單價不同,折扣不同,對這種需求的處理,如果分情況處理,將會很麻煩,如果用Case語句,就可以在一條SQL語句中得到想要的結果。
首先看一下,Case的語法: case when 條件A Then 結果A When 條件B 結果B 。
else 結果N end 和Decode 不同的是,Decode 只能針對固定的值,而 Case 可以用不是固定值,需是一個條件。 現在有以下的需求,有一個字符串,最后的兩位可能是 '/R' ,'/T' 另外,有的后兩位沒有前面的'/R' ,'/T' ,現在針對不同的需要,要將 '/R' ,'/T' 取掉,沒有 '/R' ,'/T', 就不做處理。
具體字符串如下: A01JCL-A01JCL/GF117F0001TR/R SQL寫法可以如下: select (case when instr(code, '/R') > 0 then substr(code, 1, instr(code, '/R') - 1) when instr(code, '/T') > 0 then substr(code, 1, instr(code, '/T') - 1) else '0' end) from table_A t ; 使用Case時,要用括號括起來。
SQL語句中Case 的用法
不用CASE WHEN 的做法。源代碼如下:
string sql="select * from CONTACTPERSON ,CUSTOMER where CONTACTPERSONID='"+strContactid+"' and *ERID=*ERID";
DataSet ds=new DataSet();
ds=*ommon(sql);
if(*[0].Rows[0]["CONTACTPERSONSEX"].ToString()=="0")
{
*[0].Rows[0]["CONTACTPERSONSEX"]="男";
}
else
{
*[0].Rows[0]["CONTACTPERSONSEX"]="女";
}
使用CASE WHEN做法。
string sql="select CUSTOMER.*,*TPERSONNAME,*TPERSONBIRTHDAY,*TPERSONPOSITION,*TPERSONDEPTNAME,";
sql+="*ONE,*,*,*CE,*DE,*Y,*,";
sql+="*OR,";
sql+="case when *TPERSONSEX = '0'then '男' when *TPERSONSEX= '1' then '女' end as CONTACTPERSONSEX from CUSTOMER ,CONTACTPERSON where CONTACTPERSONID='"+strContactid+"' and *ERID=*ERID";
可以看出這樣明顯加長了,SQL語句,這樣做有什么好處呢?不太清楚,可能會提高效率吧。大家的看法呢?
sql語句中的Case如何使用
方法一:select (case TitleOfCourtesy when 'Ms.' then '女士' when 'Mr.' then '男士' else '' end) as TitleOfCourtesy from *ees方法二:select (case when TitleOfCourtesy = 'Ms.' then '女士' when TitleOfCourtesy = 'Mr.' then '男士' else '' end) as TitleOfCourtesy from *ees這是網上查的。
呵呵。
sql語句中的Case如何使用
方法一:
select (case TitleOfCourtesy when 'Ms.' then '女士' when 'Mr.' then '男士' else '' end) as TitleOfCourtesy from *ees
方法二:
select (case when TitleOfCourtesy = 'Ms.' then '女士' when TitleOfCourtesy = 'Mr.' then '男士' else '' end) as TitleOfCourtesy from *ees
這是網上查的。呵呵
sql語句case的用法
select case when stcd='stcd' and tm between 'd1' and convert(varchar(100),year(dateadd(day,1,'d1')))
+'-'+convert(varchar(100),month(dateadd(day,1,'d1')))
+'-'+convert(varchar(100),day(dateadd(day,1,'d1')))
+' 8:00:00' then sum(drp) when stcd='stcd' and tm between convert(varchar(100),year(dateadd(day,-1,'d1')))
+'-'+convert(varchar(100),month(dateadd(day,-1,'d1')))
+'-'+convert(varchar(100),day(dateadd(day,-1,'d1')))
+' 9:00:00' and 'd1' then sum(drp) end drpsum from st_pptn_r你把'stcd'和'd1'換成具體值,試試看。
sql語句中case when的使用問題
舉個例子就明白了,例如在員工的工資表把員工的工資分成等級1000以下為低薪,1000-2000為中等,其他為高薪select (case when salary <= 1000 then '低薪' when salary > 1000 and salary < 2000 then '中等' else '高薪' end ) as 工資等級 from employee 這樣,工資等級就可以當做一個列來處理,包括where里面,可以寫where (case when salary <= 1000 then '低薪' when salary > 1000 and salary < 2000 then '中等' else '高薪' end ) = '低薪'當做一個列就好了。