sql語言中有沒有相似C語言中的switch case的語句??html
沒有,用case when 來代替就好了.
例如,下面的語句顯示中文年月
select getdate() as 日期,case month(getdate())
when 11 then '十一'
when 12 then '十二'
else substring('一二三四五六七八九十', month(getdate()),1)
end+'月' as 月份sql
=================================================spa
CASE 多是 SQL 中被誤用最多的關鍵字之一。雖然你可能之前用過這個關鍵字來建立字段,可是它還具備更多用法。例如,你能夠在 WHERE 子句中使用 CASE。
首先讓咱們看一下 CASE 的語法。在通常的 SELECT 中,其語法以下:
SELECT<myColumnSpec>=
CASE
WHEN<A>THEN<somethingA>
WHEN<B>THEN<somethingB>
ELSE<somethingE>
END
在上面的代碼中須要用具體的參數代替尖括號中的內容。下面是一個簡單的例子:
USE pubs
GO
SELECT
Title,
'Price Range'=
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END
FROM titles
ORDERBY price
GO
這是 CASE 的典型用法,可是使用 CASE 其實能夠作更多的事情。比方說下面的 GROUPBY 子句中的 CASE:
SELECT'Number of Titles', Count(*)
FROM titles
GROUPBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END
GO
你甚至還能夠組合這些選項,添加一個 ORDERBY 子句,以下所示:
USE pubs
GO
SELECT
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
ENDAS Range,
Title
FROM titles
GROUPBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END,
Title
ORDERBY
CASE
WHEN price ISNULLTHEN'Unpriced'
WHEN price <10THEN'Bargain'
WHEN price BETWEEN10and20THEN'Average'
ELSE'Gift to impress relatives'
END,
Title
GO
注意,爲了在 GROUPBY 塊中使用 CASE,查詢語句須要在 GROUPBY 塊中重複 SELECT 塊中的 CASE 塊。
除了選擇自定義字段以外,在不少狀況下 CASE 都很是有用。再深刻一步,你還能夠獲得你之前認爲不可能獲得的分組排序結果集。日誌
轉自:http://www.cnblogs.com/qiantuwuliang/archive/2009/06/03/1495770.htmlhtm