通過(guò)SQL Server的位運(yùn)算功能巧妙解決多選查詢(xún)方法
[Serializable]
public enum CustomerStatus
{
New = 0,
Active = 1,
Overdue = 2,
Suspended = 3,
Closing = 4,
Closed = 5
}
在數(shù)據(jù)庫(kù)中以int形式存儲(chǔ)了Status值。
如果我在頁(yè)面中想一次搜索狀態(tài)為Active,Overdue和Suspended狀態(tài)的Customer,該怎么辦?程序是不是得把這三個(gè)狀態(tài)值
拼成字符串傳遞給SQL去處理?雖然能實(shí)現(xiàn),但是相當(dāng)?shù)托А?
現(xiàn)在給出一個(gè)標(biāo)準(zhǔn)解決方案:
(1). 所有可能被用作搜索條件的枚舉都應(yīng)按如下位運(yùn)算方式定義。
public enum CustomerStatus
{
New = 1,
Active = 1<<1,
Overdue = 1<<2,
Suspended = 1<<3,
Closing = 1<<4,
Closed = 1<<5
}
(2). 在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),Status的字段必須為int型。
這樣當(dāng)我們做多選查詢(xún)時(shí)@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended
(3). 查詢(xún)語(yǔ)句如下:
Select *
From Customer
Where [Status] & @Status = [Status]
如果@Status可為null時(shí),
Select *
From Customer
Where ( @Status is null Or [Status] & @Status = [Status])
用這樣一條簡(jiǎn)單的語(yǔ)句,就可以獲取到所有符合@Status要求的數(shù)據(jù)行。
- C# 位運(yùn)算符整理
- Erlang的運(yùn)算符(比較運(yùn)算符,數(shù)值運(yùn)算符,移位運(yùn)算符,邏輯運(yùn)算符)
- shell 基本計(jì)算、邏輯運(yùn)算、位運(yùn)算詳解
- c語(yǔ)言中用位運(yùn)算實(shí)現(xiàn)加法技巧介紹
- Java中位運(yùn)算(移位、位與、或、異或、非) 的簡(jiǎn)單實(shí)例
- C#枚舉中的位運(yùn)算權(quán)限分配淺談
- C語(yǔ)言位運(yùn)算符:與、或、異或、取反、左移與右移詳細(xì)介紹
- 詳細(xì)介紹Python語(yǔ)言中的按位運(yùn)算符
- JavaScript按位運(yùn)算符的應(yīng)用簡(jiǎn)析
- 圖文詳解C語(yǔ)言位運(yùn)算基礎(chǔ)知識(shí)
相關(guān)文章
SQL Server提示"選定的用戶(hù)擁有對(duì)象,所以無(wú)法除去該用戶(hù)”
今天在幫朋友弄一臺(tái)服務(wù)器的時(shí)候當(dāng)我需要?jiǎng)h除一個(gè)數(shù)據(jù)庫(kù)里的用戶(hù)時(shí),提示如下錯(cuò)誤信息: "選定的用戶(hù)擁有對(duì)象,所以無(wú)法除去該用戶(hù)" 如何解決呢?2009-04-04
Sql Server 索引使用情況及優(yōu)化的相關(guān)Sql語(yǔ)句分享
Sql Server 索引使用情況及優(yōu)化的相關(guān) Sql 語(yǔ)句,非常好的SQL語(yǔ)句,記錄于此,需要的朋友可以參考下2012-05-05
SQL Server Bulk Insert 只需要部分字段時(shí)的方法
上午在找Bulk Insert的資料看,還轉(zhuǎn)了一篇。不巧今天下午就用上了,我遇到的需求是導(dǎo)出表A中的N個(gè)字段,然后導(dǎo)入到表B的N個(gè)字段當(dāng)中。2011-10-10
sql語(yǔ)句中單引號(hào),雙引號(hào)的處理方法
關(guān)于Insert字符串 很多同學(xué)都在(單引號(hào),雙引號(hào))這個(gè)方面發(fā)生了問(wèn)題,其實(shí)主要是因?yàn)閿?shù)據(jù)類(lèi)型和變量在作怪。2013-03-03
關(guān)于sql和mysql對(duì)于別名不能調(diào)用的一些理解
由于有部分語(yǔ)句別名不能調(diào)用原來(lái)是由于別名機(jī)制不同引起的,為了避免下次發(fā)生就整理了一下sql和mysql執(zhí)行順序發(fā)現(xiàn)內(nèi)部機(jī)制是一樣的,最大區(qū)別是在別名的引用上2013-11-11
sql server編寫(xiě)通用腳本實(shí)現(xiàn)獲取一年前日期的方法
這篇文章主要介紹了sql server編寫(xiě)通用腳本實(shí)現(xiàn)獲取一年前日期,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Spark SQL 中對(duì) Map 類(lèi)型的操作函數(shù)示例詳解
這篇文章主要介紹了SparkSQL中對(duì)Map類(lèi)型的操作函數(shù),包括創(chuàng)建、訪(fǎng)問(wèn)、修改、合并、鍵值操作等功能,通過(guò)這些函數(shù),可以方便地進(jìn)行復(fù)雜鍵值對(duì)數(shù)據(jù)的處理,感興趣的朋友跟隨小編一起看看吧2025-01-01
Sql Server 創(chuàng)建數(shù)據(jù)庫(kù)腳本Create DATABASE
這篇文章主要介紹了Sql Server 創(chuàng)建數(shù)據(jù)庫(kù)腳本語(yǔ)句Create DATABASE的使用,需要的朋友可以參考下2014-08-08

