亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SqlServer使用 case when 解決多條件模糊查詢(xún)問(wèn)題

2024-08-31 01:03:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了SqlServer使用 case when 解決多條件模糊查詢(xún)問(wèn)題 的相關(guān)資料,需要的朋友可以參考下
 

我們?cè)谶M(jìn)行項(xiàng)目開(kāi)發(fā)中,經(jīng)常會(huì)遇到多條件模糊查詢(xún)的需求。對(duì)此,我們常見(jiàn)的解決方案有兩種:一是在程序端拼接SQL字符串,根據(jù)是否選擇了某個(gè)條件,構(gòu)造相應(yīng)的SQL字符串;二是在數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程中使用動(dòng)態(tài)的SQL語(yǔ)句。其本質(zhì)也是拼接SQL字符串,不過(guò)是從程序端轉(zhuǎn)移到數(shù)據(jù)庫(kù)端而已。

這兩種方式的缺點(diǎn)是顯而易見(jiàn)的:一是當(dāng)多個(gè)條件每個(gè)都可為空時(shí),要使用多個(gè)if語(yǔ)句進(jìn)行判斷;二是拼接的SQL語(yǔ)句容易產(chǎn)生SQL注入漏洞。

最近寫(xiě)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的時(shí)候經(jīng)常使用case when 語(yǔ)句,正好可以用這個(gè)語(yǔ)句解決一下以上問(wèn)題。以SQL中的NorthWind數(shù)據(jù)庫(kù)為例,我要操作的是其中的Employees表,該表中默認(rèn)數(shù)據(jù)如下:  

SqlServer使用 case when 解決多條件模糊查詢(xún)問(wèn)題

使用如下腳本來(lái)查詢(xún)表中數(shù)據(jù):

代碼

 DECLARE @FirstName NVARCHAR(),      @LastName  NVARCHAR();  SELECT @FirstName = '',      @LastName = '';  SELECT *  FROM  Employees c  WHERE CHARINDEX(        (          CASE            WHEN @FirstName = '' THEN FirstName           ELSE @FirstName         END       ),       FirstName     ) >      AND CHARINDEX(         (CASE WHEN @LastName = '' THEN LastName ELSE @LastName END),         LastName       ) > 

 執(zhí)行后會(huì)發(fā)現(xiàn)查出的結(jié)果和圖1一樣。

我們把第二行的@FirstName變量賦值為'n'試試,會(huì)把所有FirstName字段中包含字符串'n'的記錄查出來(lái),如下圖:

SqlServer使用 case when 解決多條件模糊查詢(xún)問(wèn)題

如果我們?cè)侔训谌械腀LastName變量賦值為'd'試試,結(jié)果會(huì)把所有FirstName字段包含'n'并且LastName字段包含'd'的記錄查出來(lái),如下圖:

SqlServer使用 case when 解決多條件模糊查詢(xún)問(wèn)題

通過(guò)以上例子我們可以看到,通過(guò)給兩個(gè)變量傳遞不同的值,就可以根據(jù)多條件進(jìn)行模糊查詢(xún)了,如果把上面的語(yǔ)句寫(xiě)在存儲(chǔ)過(guò)程中,就可以不必再拼接SQL語(yǔ)句了,也不會(huì)出現(xiàn)注入式問(wèn)題了。

以上腳本的簡(jiǎn)單說(shuō)明:用charindex函數(shù)替換like,避免拼接sql語(yǔ)句;使用case when 語(yǔ)句,當(dāng)傳遞的參數(shù)值為空字符串時(shí)讓條件始終為真,即等于忽略該條件,不為空串時(shí)按參數(shù)值模糊查詢(xún)。

以上是工作中的經(jīng)驗(yàn)總結(jié),希望對(duì)大家有幫助。有關(guān)case when還有一些比較實(shí)用的用法,有時(shí)間的話再寫(xiě)寫(xiě)。

下面給大家介紹SQL CASE 多條件用法

Case具有兩種格式。簡(jiǎn)單Case函數(shù)和Case搜索函數(shù)。

--簡(jiǎn)單Case函數(shù)CASE sex     WHEN '' THEN '男'     WHEN '' THEN '女'ELSE '其他' END--Case搜索函數(shù)CASE WHEN sex = '' THEN '男'     WHEN sex = '' THEN '女'ELSE '其他' END

這兩種方式,可以實(shí)現(xiàn)相同的功能。簡(jiǎn)單Case函數(shù)的寫(xiě)法相對(duì)比較簡(jiǎn)潔,但是和Case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫(xiě)判斷式。 

還有一個(gè)需要注意的問(wèn)題,Case函數(shù)只返回第一個(gè)符合條件的值,剩下的Case部分將會(huì)被自動(dòng)忽略。 

--比如說(shuō),下面這段SQL,你永遠(yuǎn)無(wú)法得到“第二類(lèi)”這個(gè)結(jié)果

CASE WHEN col_ IN ( 'a', 'b') THEN '第一類(lèi)'     WHEN col_ IN ('a')    THEN '第二類(lèi)'ELSE'其他' END

下面我們來(lái)看一下,使用Case函數(shù)都能做些什么事情。 

一,已知數(shù)據(jù)按照另外一種方式進(jìn)行分組,分析。 

有如下數(shù)據(jù):(為了看得更清楚,我并沒(méi)有使用國(guó)家代碼,而是直接用國(guó)家名作為Primary Key) 

國(guó)家(country)    人口(population)

中國(guó)    

美國(guó)    

加拿大    

英國(guó)    

法國(guó)    

日本    

德國(guó)    

墨西哥    

印度    

根據(jù)這個(gè)國(guó)家人口數(shù)據(jù),統(tǒng)計(jì)亞洲和北美洲的人口數(shù)量。應(yīng)該得到下面這個(gè)結(jié)果。 

洲    人口

亞洲    

北美洲    

其他    

想要解決這個(gè)問(wèn)題,你會(huì)怎么做?生成一個(gè)帶有洲Code的View,是一個(gè)解決方法,但是這樣很難動(dòng)態(tài)的改變統(tǒng)計(jì)的方式。 

如果使用Case函數(shù),SQL代碼如下: 

SELECT SUM(population),    CASE country        WHEN '中國(guó)'   THEN '亞洲'        WHEN '印度'   THEN '亞洲'        WHEN '日本'   THEN '亞洲'        WHEN '美國(guó)'   THEN '北美洲'        WHEN '加拿大' THEN '北美洲'        WHEN '墨西哥' THEN '北美洲'    ELSE '其他' ENDFROM  Table_AGROUP BY CASE country        WHEN '中國(guó)'   THEN '亞洲'        WHEN '印度'   THEN '亞洲'        WHEN '日本'   THEN '亞洲'        WHEN '美國(guó)'   THEN '北美洲'        WHEN '加拿大' THEN '北美洲'        WHEN '墨西哥' THEN '北美洲'    ELSE '其他' END;

同樣的,我們也可以用這個(gè)方法來(lái)判斷工資的等級(jí),并統(tǒng)計(jì)每一等級(jí)的人數(shù)。SQL代碼如下; 

SELECT    CASE WHEN salary <= THEN ''       WHEN salary > AND salary <=  THEN ''       WHEN salary > AND salary <=  THEN ''       WHEN salary > AND salary <= THEN ''    ELSE NULL END salary_class,    COUNT(*)FROM  Table_AGROUP BY    CASE WHEN salary <= THEN ''       WHEN salary > AND salary <=  THEN ''       WHEN salary > AND salary <=  THEN ''       WHEN salary > AND salary <= THEN ''    ELSE NULL END;

二,用一個(gè)SQL語(yǔ)句完成不同條件的分組。 

有如下數(shù)據(jù) 

國(guó)家(country)    性別(sex)    人口(population)

中國(guó)        

中國(guó)        

美國(guó)        

美國(guó)        

加拿大        

加拿大        

英國(guó)        

英國(guó)        

按照國(guó)家和性別進(jìn)行分組,得出結(jié)果如下 

國(guó)家    男    女

中國(guó)        

美國(guó)        

加拿大        

英國(guó)        

普通情況下,用UNION也可以實(shí)現(xiàn)用一條語(yǔ)句進(jìn)行查詢(xún)。但是那樣增加消耗(兩個(gè)Select部分),而且SQL語(yǔ)句會(huì)比較長(zhǎng)。 

下面是一個(gè)是用Case函數(shù)來(lái)完成這個(gè)功能的例子 

SELECT country,    SUM( CASE WHEN sex = '' THEN            population ELSE END), --男性人口    SUM( CASE WHEN sex = '' THEN            population ELSE END)  --女性人口FROM Table_AGROUP BY country;

這樣我們使用Select,完成對(duì)二維表的輸出形式,充分顯示了Case函數(shù)的強(qiáng)大。 

三,在Check中使用Case函數(shù)。

在Check中使用Case函數(shù)在很多情況下都是非常不錯(cuò)的解決方法??赡苡泻芏嗳烁揪筒挥肅heck,那么我建議你在看過(guò)下面的例子之后也嘗試一下在SQL中使用Check。 

下面我們來(lái)舉個(gè)例子 

公司A,這個(gè)公司有個(gè)規(guī)定,女職員的工資必須高于塊。如果用Check和Case來(lái)表現(xiàn)的話,如下所示 

CONSTRAINT check_salary CHECK      ( CASE WHEN sex = ''         THEN CASE WHEN salary >             THEN ELSE END         ELSE END = )

如果單純使用Check,如下所示 

CONSTRAINT check_salary CHECK      ( sex = '' AND salary > )

女職員的條件倒是符合了,男職員就無(wú)法輸入了。 

****我的一個(gè)示例:<br>SELECT (CASE WHEN t.name='name' THEN 'ok' ELSE 'no' END) AS myCom, jname FROM t<br>定義一個(gè)新的字段,此字段用來(lái)顯示字段結(jié)果的不同顯示結(jié)果,似于switch...case 



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MSSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产人妻精品久久久久野外| 欧美午夜影院一区| 日韩欧美电影一二三| 日本中文字幕高清视频| 欧美aaa大片视频一二区| 国产精选一区二区三区| 久久69国产一区二区蜜臀| 日本特黄a级片| 中文乱码免费一区二区三区下载| 亚洲国产精品久久久久久6q| 欧美黑人做爰爽爽爽| 黄页在线观看免费| 九九热在线视频观看这里只有精品| 欧美丰满少妇人妻精品| 色网址在线观看| 国产精品极品美女在线观看免费| 黄色春季福利在线看| 亚洲欧美激情诱惑| 日韩三级高清在线| 亚洲天堂av在线免费观看| 无码人妻精品一区二区三区在线| 成年人视频观看| 亚洲美腿欧美激情另类| 91精品国产66| 天天堂资源网在线观看免费视频| 亚洲精品综合| 欧美日韩精品久久| 2012中文字幕在线视频| 国产又黄又猛又粗又爽| 成人欧美一区二区三区| 中文av资源| 四虎8848精品成人免费网站| 九色蝌蚪性视频| 久草在线新免费首页资源站| 国产乱人伦精品一区| 欧美成人精品不卡视频在线观看| 日日噜噜噜噜人人爽亚洲精品| 亚洲人成电影网站色…| 日韩精品一区二区三区免费观看| 啪啪av大全导航福利网址| 97视频在线免费| 国产精品久久久久77777丨| 国产精品特级毛片一区二区三区| 欧美xxav| 国产视频一区免费看| 日韩成人免费av| 日本一区二区在线免费播放| 美腿丝袜在线亚洲一区| 日韩妆和欧美的一区二区| 午夜男人天堂| 欧美a极品极品欧美| 免费在线成人网| 亚洲国产精品一区二区久| 国产综合久久久久久久久久久久| 91丨九色丨丰满| 精品国产乱子伦| 亚洲午夜精品视频| 特级西西444www大胆免费看| 亚洲精品aaaaa| 日本麻豆一区二区三区视频| www男人的天堂| 91精品在线观看视频| 亚洲国产精品一区二区久| 成人黄色免费看| 欧美激情aⅴ一区二区三区| 欧美久久久久久久久久久久| 日韩人妻无码精品久久久不卡| 欧美特黄一区| 国产成人aa在线观看网站站| 免费一级片91| 果冻天美麻豆一区二区国产| 激情婷婷丁香| 成人免费无遮挡无码黄漫视频| 一级片视频网站| 国产熟妇久久777777| 国内成人免费视频| 成熟人妻av无码专区| 亚洲精品视频免费在线观看| 色一情一乱一伦| 翔田千里亚洲一二三区| 色播五月综合网| 精品久久久久久久久久久下田| 偷拍与自拍一区| 欧美成人性战久久| 欧美一级二级三级区| 男女污污的视频| 亚洲一区中文字幕永久在线| 福利一区二区免费视频| 日韩精品免费观看| 国产一级不卡视频| 国产一级在线视频| 在线观看日韩精品| xxxx黄色| 成人国产免费电影| 久久久久久久久97| 日韩网站在线观看| av成人综合网| 91se在线观看| 999在线观看| 丁香六月激情综合| 98视频精品全部国产| av色影在线看免费| 欧美军同video69视频| 国精产品一区二区| 欧美视频在线播放一区| 在线免费黄色| 巨大荫蒂视频欧美另类大| 久久99久国产精品黄毛片入口| 国产三区四区在线观看| 久久野战av| 亚洲一二在线观看| 欧洲女同同性吃奶| 99精品久久免费看蜜臀剧情介绍| 国产一区二区成人久久免费影院| 亚洲日本va午夜在线影院| 91国在线精品国内播放| 看女生喷水的网站在线观看| 91视频亚洲| 国产精品999久久久| 欧美日韩一级黄色片| 婷婷国产在线| 亚洲精品无播放器在线播放| 公共露出暴露狂另类av| 九九热这里只有| 日韩免费视频| 一区二区三区伦理片| 日韩免费观看一区二区| 最近高清中文在线字幕在线观看1| 蜜芽在线视频| 视频在线观看一区二区| 在线免费电影网| 一级毛片在线视频| 久久精品人成| 纪美影视在线观看电视版使用方法| 麻豆成人免费电影| 在线观看国产视频一二三| 成人看片在线观看| 国产三级精品三级观看| 久久狠狠久久综合桃花| 欧美videos中文字幕| 蜜桃91精品入口| 久久国产视频精品| 91嫩草国产线观看亚洲一区二区| 亚洲综合二区| 男女做爰猛烈刺激| 国产精品日韩精品中文字幕| www.97| 欧美日韩激情在线| 欧美综合久久| 国产精品久久一区二区三区| 中韩乱幕日产无线码一区| 亚洲视频在线观看日本a| 欧美不卡高清一区二区三区| 福利微拍一区二区| 中国女人精69xxxxxx视频| 成人性生交大片免费看中文视频| 国产精品久久久久久久美男| 国产一二在线观看| 国产精品乱码视频| 在线免费电影网| 粉嫩老牛aⅴ一区二区三区| 酒色婷婷桃色成人免费av网| japonensisjava老师可播放| 日韩亚洲精品在线观看| 欧美一级二级在线观看| 亚洲图片欧美在线| 免费在线视频一区| 日本免费视频在线观看| 丁香婷婷综合色啪| 日韩av综合网站| 免费在线性爱视频| 麻豆国产精品视频| 日韩 欧美一区二区三区| 国产欧美精品xxxx另类| 天堂av手机在线| 成全视频在线播放大地| 亚洲理论在线a中文字幕| 真人做人试看60分钟免费| 国产黄色片网站| 欧美日韩欧美一区二区| 26uuu成人网| 麻豆专区一区二区三区四区五区| 红桃视频一区二区三区免费| 一区二区日韩在线观看| 精品久久久久久中文字幕| 欧美日韩在线视频观看| 国a精品视频大全| 天天操天天插天天射| 欧美军同video69视频| 久久精品中文字幕| 91大神网址| 国产最顶级的黄色片在线免费观看| mm131国产精品| 91视频国产精品| 国产高清在线一区二区| 久久国产视频播放| 亚洲直播在线一区| 先锋av影院| 1区不卡电影| 国产精品一区二区不卡视频| caoporn成人免费视频在线| 奇米色一区二区三区四区| 伊人久久久久久久久久久久久久| 人人妻人人澡人人爽欧美一区双| 欧美成人精品福利在线视频| 亚洲成人黄色在线| 亚洲精品国产精品久久清纯直播| 91精品在线观看入口| 日韩精品一级毛片在线播放| 在线看片中文字幕| 岛国一区二区在线观看| 性猛交富婆╳xxx乱大交天津| 三级黄色片免费看| 亚洲另类在线视频| 国产一区二区在线视频聊天| 亚洲电影中文字幕| 中文字幕av一区二区三区| 亚洲精品电影网在线观看| 久久精品超碰| 国产一区二区精品久久91| 日本性视频网站| 美女一区二区三区| 国产日韩精品suv| 免费av一区二区三区| 欧美美女被草| 麻豆传媒一区| 红杏成人性视频免费看| 日本久久精品视频| 在线观看成人小视频| 久久综合色综合88| 91亚洲精华国产精华| 一区二区三区回区在观看免费视频| 国产原创中文在线观看| 大波视频国产精品久久| 国产成人免费观看| 亚洲黄色免费视频| 国内精品区一区二区三| 成人午夜影院在线观看| 91精品久久久久久久久不口人| 日韩一区二区免费在线观看| 国产日产欧美一区二区视频| 亚洲免费网站| 色多多国产成人永久免费网站| 亚洲激情精品| 亚洲熟妇无码另类久久久| 日韩专区一卡二卡| 强行糟蹋人妻hd中文| 91精品久久久久久久久| 一级片黄色免费| 亚洲精品综合在线| 99久久久久国产精品免费| 国产又粗又猛又爽又黄的视频一| 午夜亚洲精品| 欧美巨大另类极品videosbest| 国产日韩欧美黄色| 免费午夜一级| 欧美日韩日本国产| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲日本在线天堂| 亚洲一区二区福利| 欧美深夜福利| 欧美91看片特黄aaaa| 精品一区二区三区中文字幕老牛| 一区在线播放视频| 无码人妻精品一区二区三区在线| 成人性做爰aaa片免费看不忠| 中文字幕无码日韩专区免费| 中文字幕乱码日本亚洲一区二区| 久热免费在线观看| hd100%videos日本| 国产精品入口麻豆免费看| 国产iv一区二区三区| 欧美电影免费播放| 国产剧情av在线| 欧美精品久久| 好吊成人免视频| 一区二区三区av在线| 久久99久久99精品免费看小说| 一区二区三区回区在观看免费视频| 日本欧美黄色片| 久久影视一区二区| 国产一区二区三区成人欧美日韩在线观看| 亚洲黄色视屏| 里番精品3d一二三区| 国产精品日韩在线播放| 亚洲国内高清视频| 性一交一乱一伧老太| 影音先锋成人资源网站| 欧美性潮喷xxxxx免费视频看| 国产亚洲精品bt天堂精选| 91视频最新入口| 亚洲va欧美va| 国产男人搡女人免费视频| 久久久天堂国产精品| 精品国内亚洲2022精品成人| 亚洲精品成av人片天堂无码| 粉嫩av懂色av蜜臀av分享| 欧美国产禁国产网站cc| 国产电影一区| 亚洲视频tv| 久久久久综合一区二区三区| 色婷婷综合久久久久久| 日韩电影中文字幕一区| 国产日韩精品一区二区浪潮av| 精品国产麻豆免费人成网站| 黑人精品xxx一区一二区| 日韩精品一区二区三区国语自制| 在线看黄网址| 成人网在线观看| 国产日韩亚洲| 18av在线播放| 精品福利免费观看| 麻豆网站免费在线观看| 亚洲综合成人网| gogo人体高清视频| 4hu最新网址| 交视频在线观看国产| 日韩欧美一级在线播放| 91久久精品无嫩草影院| 国产精品亚洲综合久久小说| 国产一区二区av在线| 国产精品福利导航| 三年中文在线观看免费大全中国| 最近中文字幕mv2018在线高清| 国产成人在线视频观看| 噜噜噜久久亚洲精品国产品麻豆| 欧美三日本三级少妇三2023| 狠狠操综合网|