Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एकल तालिका स्तंभ में एकाधिक बिट मान संग्रहीत करें

आप इसे बिटफील्ड के रूप में स्टोर कर सकते हैं और फिर मूल्यों को पुनः प्राप्त करने के लिए बूलियन लॉजिक ऑपरेटरों का उपयोग कर सकते हैं

उदाहरण के लिए:

CREATE TABLE [dbo].[testBF](
    [field1] [varchar](max) NOT NULL,
    [field2] [varchar](max) NOT NULL,
    [bitfield] [int] NOT NULL CONSTRAINT [DF_testBF_bitfield]  DEFAULT ((0))
) ON [PRIMARY]

फिर चयन के लिए:

SELECT field1, field2,
       CASE WHEN (bitfield & 1) = 1 THEN 'monday ' ELSE '' END + 
       CASE WHEN (bitfield & 2) = 2 THEN 'tuesday ' ELSE '' END +
       CASE WHEN (bitfield & 4) = 4 THEN 'wednesday ' ELSE '' END +
       CASE WHEN (bitfield & 8) = 8 THEN 'thursday ' ELSE '' END +
       CASE WHEN (bitfield & 16) = 16 THEN 'friday' ELSE '' END as [days of week]
FROM testBF

मंगलवार के झंडे वाले सभी दिनों को खोजने के लिए (मंगलवार दूसरा बिट या 2^1 या 2 है)

SELECT * 
FROM aTable
WHERE (bitfield & 2) = 2

या

SELECT * 
FROM aTable
WHERE (bitfield & 2) != 0

ध्यान दें, दूसरे मामले में टेम्पलेट किसी भी बिट के लिए काम करेगा - यानी शुक्रवार के लिए (5वां बिट या 2^4 या 16) होगा

SELECT * 
FROM aTable
WHERE (bitfield & 16) != 0

अंत में सामान्य मामला... एक संख्या में पास करें (सोमवार के लिए 1) जो आपको मिलता है

SELECT * 
FROM aTable
WHERE (bitfield & POWER(2,@inNumOfWeekday-1)) != 0

यह मेरे लिए बहुत काम की तरह लगता है, जब आप इसे केवल 5 (या 7 बिट फ़ील्ड) के रूप में सहेज सकते हैं, लेकिन आप इसे कैसे कर सकते हैं।

अधिक उदाहरणों के लिए उस सार को देखें जो मैंने एक अन्य प्रश्न के लिए लिखा था:

https://gist.github.com/1846338

और उत्तर:

https://stackoverflow.com/a/9302106/215752



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL कथनों में उपसर्ग N का क्या अर्थ है और मुझे इसका उपयोग कब करना चाहिए?

  2. SQL कनेक्शन स्ट्रिंग में कस्टम विशेषताएँ कैसे जोड़ें?

  3. SQL सर्वर इंस्टेंस पर सभी डेटाबेस से प्राथमिक कुंजी बाधा की सूची कैसे प्राप्त करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 60

  4. ऑब्जेक्ट 'DF__*' कॉलम '*' पर निर्भर है - int को डबल में बदलना

  5. Azure डेटा स्टूडियो पर SQL सर्वर एजेंट एक्सटेंशन स्थापित करें