補(bǔ)充:SQL常用判斷語(yǔ)句和函數(shù)


1须板、case when ?(判斷條件) ?then ? ... ?else ?... end

select ?ID,UserName,namer=(case when score <= '50') then ?'實(shí)習(xí)'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when score > '50' and score <= '500' ?then '村衛(wèi)生員'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when score > '500' and score <= '1000' ?then '村衛(wèi)生員'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? when score > '1000' and score <= '1500'? then '鄉(xiāng)衛(wèi)生員'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??else ?'健康大使' ?end

from table

where ...


2夏醉、ISNULL(check_expression , replacement_value)

參數(shù)一:check_expression

? ? ? ? ? ? ? ?將被檢查是否為 NULL的表達(dá)式匙隔。check_expression 可以是任何類型的疑苫。

參數(shù)二:replacement_value

? ? ? ? ? ? ? ? 在 check_expression 為 NULL時(shí)將返回的表達(dá)式。replacement_value 必須與 check_expresssion 具有相同的類型纷责。

返回類型:

? ? ? ? ? ? ? ? ?返回與 check_expression 相同的類型捍掺。

注釋:

? ? ? ? ? ?如果 check_expression 不為 NULL,那么返回該表達(dá)式的值再膳;否則返回 replacement_value挺勿。

? ? ? ? ? ?例:ISNULL(T.sum, 0)


3、sql語(yǔ)句中用到除運(yùn)算時(shí)喂柒,防止除數(shù)為0和保留兩位小數(shù)點(diǎn)

例如:a / b 但是b有可能是0不瓶,可以將表達(dá)式改為:

? ? ? ? ? ? case when b = 0 then 0 else? a/b ?end

例如:a/b 但是a和b都是整型禾嫉,那么就需要用到decimal進(jìn)行轉(zhuǎn)換

? ? ? ? ? ? case when b<>0 then convert(decimal(6,2))


4、sql語(yǔ)句除運(yùn)算取小數(shù)點(diǎn)后幾位 decimal

例如:

? ? ? ? ? SELECT 10*1.0/4 ? ?結(jié)果為2.500000

? ? ? ? ? 所以蚊丐,如果我們要保留2位小數(shù)的話熙参,語(yǔ)句如下:

? ? ? ? ? SELECT CAST(10*1.0/4 AS DECIMAL(18,2))


5、SELECT 與 SET 區(qū)別:

① SELECT 可以在一條語(yǔ)句里對(duì)多個(gè)變量同時(shí)賦值麦备,而SET只能一次對(duì)一個(gè)變量賦值

? ? ?例如:SELECT @A = 'Y',@B = 'M'

? ? ? ? ? ? ? ? 而SET要達(dá)到同樣的效果尊惰,需要:

? ? ? ? ? ? ? ? SET @A = 'Y'

? ? ? ? ? ? ? ? SET @B = 'M'

②表達(dá)式返回多個(gè)值時(shí),用SET將會(huì)出錯(cuò)泥兰,而SELECT將取最后一個(gè)值

? ? ?例如:假設(shè)Table這個(gè)表中有多個(gè)IsRight記錄

? ? ? ? ? ? ? ? SELECT @A = IsRight ?FROM Table ---- 將取最后一個(gè)值

? ? ? ? ? ? ? ? SET @A = IsRight? FROM Table ---- 將報(bào)錯(cuò)

③表達(dá)式無(wú)返回值弄屡,用SET將置變量值為NULL,用SELECT交保持變量值

? ? 以下假定Table記錄為空

? ? SET @A = '初始值'

? ? SELECT @A = IsRight FROM Table ?---此時(shí)@A為'初始值'

? ? SET @A =(SELECT IsRight FROM Table)--此時(shí)@A為NULL

④使用標(biāo)量子查詢時(shí)鞋诗,如果無(wú)返回值膀捷,SET和SELECT一樣,都將置為NULL

? ? 以下假定Table記錄為空

? ? SET @A = '初始化'

? ? SELECT @A = (SELECT IsRight FROM Table) ---此時(shí)@A為NULL

? ? SET @A ?= (SELECT IsRight FROM Table) ?---此時(shí)@A為NULL


6削彬、不顯示受影響的行數(shù):SET NOCOUNT ON

7全庸、注意一下where語(yǔ)句中,如果涉及到多個(gè)or或者and條件盡量用括號(hào)融痛,不然很容易出現(xiàn)問(wèn)題

8壶笼、當(dāng)某張表使用as 作為代替表名時(shí),可以使用替代表名.*輸出全部表中數(shù)據(jù)

例如:select * from systemInfo as a

? ? ? ? ? ?select a.* .......

9雁刷、RANK()函數(shù):排序覆劈,比如用到學(xué)生成績(jī)排名

如圖1所示的RANK結(jié)果列,有三位同學(xué)是100分的沛励,位于第一名狀態(tài)责语,93分的同學(xué)則是第4名的狀態(tài)

10、DENSE_RANK():

如圖1.而DENSE_RANK()函數(shù)則不同目派,三名100分的同學(xué)還是位于第一名狀態(tài)坤候,93分的同學(xué)位于第2的狀態(tài)

11、ROW_NUMBER():

如圖1.對(duì)所有記錄進(jìn)行依次排序(1企蹭、2白筹、3、4谅摄、5徒河、、螟凭、)

如實(shí)際應(yīng)用中需要進(jìn)行分頁(yè)處理虚青,就會(huì)用到這個(gè)函數(shù)它呀。

例子如下:一頁(yè)顯示20行數(shù)據(jù)

set @sql = @sql + ' select? ROW_NUMBER() OVER ( ORDER BY '

if(@sorts <> '')

begin

set @sql = @sql + ' ave desc, '

end

set @sql = @sql + ' FatDate desc,CreateDate desc ) as no, '

set @sql = @sql + ' ID, TourCode, LinesName, FatDate into 【#tempA】’

//通過(guò)行號(hào)控制螺男,這里只顯示20行

set @sql = @sql + ‘select * top(20)from 【#tempA】where 1=1 ’

if(@rows > 0)

begin

set @sql? = @sql + ‘AND (no >’ + LTRIM(@rows) + ‘)’

end

12棒厘、NTILE():

如圖1 ,對(duì)學(xué)生的成績(jī)進(jìn)行分組下隧,NTILE(常量)奢人,也就是說(shuō)括號(hào)里面的常量是多少, 就分為幾組淆院。

圖1

13何乎、關(guān)于try。土辩。支救。catch異常處理

圖2

14、一些SQL關(guān)鍵字

SQL CHECK 約束:CHECK 約束用于限制列中的值的范圍拷淘。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果對(duì)單個(gè)列定義 CHECK 約束各墨,那么該列只允許特定的值。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果對(duì)一個(gè)表定義 CHECK 約束启涯,那么此約束會(huì)在特定的列中對(duì)值進(jìn)行限制贬堵。

SQL DEFAULT 約束:DEFAULT 約束用于向列中插入默認(rèn)值。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果沒(méi)有規(guī)定其他的值结洼,那么會(huì)將默認(rèn)值添加到所有的新記錄黎做。

15、COALESE(expression1,expression2,expression3...)

函數(shù)coalesce功能是返回參數(shù)中第一個(gè)非NULL值松忍。

例如:coalese(boss,0) :如果boss為空蒸殿,則返回0;如果boss不為空鸣峭,則返回boss

? ? ? ? ? ?coalese(boss,null,1):如果boss為空伟桅,看下一個(gè)參數(shù)為null,則返回最后一個(gè)參數(shù)1叽掘;如果boss

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不為空楣铁,則返回boss這個(gè)參數(shù)。

16更扁、decode(name盖腕,'apple',0)

意思是name=apple,那么返回0浓镜;否則的話返回null

17溃列、nvl(bonus,0)

意思是 如果 bonus is null , 那么返回 0膛薛, 否則返回 bonus

18听隐、當(dāng)一個(gè)參數(shù)設(shè)置為可以輸入多個(gè)數(shù)值時(shí),用in語(yǔ)法

例:select ID from table where ID in (‘+ LTRIM(@ID)+’)

有時(shí)也需注意類型轉(zhuǎn)換問(wèn)題哄啄。

19雅任、datediff 日期函數(shù) 最近常用到存儲(chǔ)過(guò)程的開(kāi)始日期和結(jié)束日期參數(shù)

if(@dateS <> ‘’)

begin

set @sql = @sql + ‘AND (DATEDIFF(day风范,‘’‘+@dateS+’’’,FatDay) >=0)’

end

if(@dateE <> ‘’)

begin

set @sql = @sql + ‘AND (DATEDIFF(day,‘’‘+@dateE+’’’,FatDay) <=0)’

end

20沪么、sql語(yǔ)句通過(guò)身份證號(hào)判斷年齡硼婿、性別、所屬省份

1禽车、①年齡:

select YEAR(GETDATE()) - substring('IDCard',7,4) as Age

? ? ?②年齡:(精確到天)

select? datediff( year, '1988-1-18' , getdate())? -? case when datediff ( day, getdate(),? dateadd( year, datediff( year, '1988-1-18', getdate()), '1988-1-18')) >= 0? then? 1? else? 0? end

2寇漫、性別:

case when len(身份證號(hào)) = 15 and cast(substring(身份證號(hào),15,1) as int) % 2 = 0 then '女'

? ? ? ? ?when len(身份證號(hào)) = 15 and cast(substring(身份證號(hào),15,1) as int) % 2 = 1 then '男'

? ? ? ? ?when len(身份證號(hào)) = 18 and cast(substring(身份證號(hào),17,1) as int) % 2 = 0 then '女'

? ? ? ? ?when len(身份證號(hào)) = 18 and cast(substring(身份證號(hào),17,1) as int) % 2 = 1 then '男'

else null end? as Sex

3、所屬省份:

CASE LEFT(`card_id`,2) WHEN 11 THEN '北京' WHEN 12 THEN '天津' WHEN 13 THEN '河北' WHEN 14 THEN '山西' WHEN 15 THEN '內(nèi)蒙古' WHEN 21 THEN '遼寧'

?? ?WHEN 22 THEN '吉林' WHEN 23 THEN '黑龍江' WHEN 31 THEN '上海' WHEN 32 THEN '江蘇' WHEN 33 THEN '浙江' WHEN 34 THEN '安徽' WHEN 35 THEN '福建' WHEN????? 36 THEN '江西'

?? ?WHEN 37 THEN '山東' WHEN 41 THEN '河南' WHEN 42 THEN '湖北' WHEN 43 THEN '湖南' WHEN 44 THEN '廣東' WHEN 45 THEN '廣西' WHEN 46 THEN '海南' WHEN 50 THEN '重慶' WHEN 51 THEN '四川'

?? ?WHEN 52 THEN '貴州' WHEN 53 THEN '云南' WHEN 54 THEN '西藏' WHEN 61 THEN '陜西' WHEN 62 THEN '甘肅' WHEN 63 THEN '青海' WHEN 64 THEN '寧夏' WHEN 65 THEN '新疆' END AS 所屬省份

21殉摔、行號(hào)與頁(yè)數(shù)的寫法

一般寫程序時(shí)會(huì)出現(xiàn)一個(gè)頁(yè)面當(dāng)中只顯示固定多少行州胳,這個(gè)時(shí)候sql語(yǔ)句中就會(huì)出現(xiàn)通過(guò)判斷行號(hào)來(lái)實(shí)現(xiàn)

例如:

圖3 行號(hào)

圖3即是對(duì)行號(hào)的sql語(yǔ)句實(shí)現(xiàn)。

接下來(lái)說(shuō)說(shuō)頁(yè)數(shù)的實(shí)現(xiàn)方法:

頁(yè)數(shù)則是類似于網(wǎng)頁(yè)上面分頁(yè)功能的實(shí)現(xiàn)逸月。

22陋葡、查詢某條件下的數(shù)據(jù)置頂

select a, b, case b when '申請(qǐng)人' then 0 else 1 end as row?

from table

where 。彻采。腐缤。

order by row,date asc

23肛响、相同ID下岭粤,兩條記錄相減求時(shí)間和

select sum(a.time-b.time)

from(select ElogID,time from 表名 where EventSubType = 1) a,(select data,time from 表名 where EventSubType = 2) b

where a.ElogID=b.ElogID

24、


未完待續(xù)特笋。剃浇。。猎物。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虎囚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔫磨,更是在濱河造成了極大的恐慌淘讥,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堤如,死亡現(xiàn)場(chǎng)離奇詭異蒲列,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)搀罢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蝗岖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人榔至,你說(shuō)我怎么就攤上這事抵赢。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵铅鲤,是天一觀的道長(zhǎng)划提。 經(jīng)常有香客問(wèn)我,道長(zhǎng)彩匕,這世上最難降的妖魔是什么腔剂? 我笑而不...
    開(kāi)封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任媒区,我火速辦了婚禮驼仪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袜漩。我一直安慰自己绪爸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布宙攻。 她就那樣靜靜地躺著奠货,像睡著了一般。 火紅的嫁衣襯著肌膚如雪座掘。 梳的紋絲不亂的頭發(fā)上递惋,一...
    開(kāi)封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音溢陪,去河邊找鬼萍虽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛形真,可吹牛的內(nèi)容都是我干的杉编。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼咆霜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邓馒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蛾坯,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤光酣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后脉课,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挂疆,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡下翎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年缤言,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片视事。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胆萧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跌穗,我是刑警寧澤订晌,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蚌吸,受9級(jí)特大地震影響锈拨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜羹唠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一奕枢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佩微,春花似錦缝彬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奶卓,卻和暖如春一疯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夺姑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工墩邀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瑟幕。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓磕蒲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親只盹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辣往,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容