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

SQL सर्वर - एक गणना कॉलम पर अनुक्रमणिका?

मान लें कि आपके पास इस प्रारूप में फ़ील्ड हैं:

00Data0007
000000Data0011
0000Data0015

, आप निम्न कार्य कर सकते हैं:

  • एक परिकलित कॉलम बनाएं:ndata AS RIGHT(REVERSE(data), LEN(data) - 4)

    यह आपके कॉलम को निम्नलिखित में बदल देगा:

    ataD00
    ataD000000
    ataD0000
    
  • उस कॉलम पर एक इंडेक्स बनाएं

  • स्ट्रिंग Data की खोज के लिए यह क्वेरी जारी करें :

    SELECT  *
    FROM    mytable
    WHERE   ndata LIKE N'ataD%'
            AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
    

    पहली शर्त मोटे फ़िल्टरिंग के लिए एक अनुक्रमणिका का उपयोग करेगी।

    दूसरा यह सुनिश्चित करेगा कि सभी प्रमुख वर्ण (जो गणना किए गए कॉलम में अनुगामी वर्ण बन गए) शून्य के अलावा और कुछ नहीं हैं।

प्रदर्शन विवरण के लिए मेरे ब्लॉग में इस प्रविष्टि को देखें:

अपडेट करें

यदि आप केवल SUBSTRING पर एक अनुक्रमणिका चाहते हैं अपनी स्कीमा बदले बिना, दृश्य बनाना एक विकल्प है।

CREATE VIEW v_substring75
WITH SCHEMABINDING
AS
SELECT  s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
FROM    mytable

CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)

SELECT  id, data
FROM    v_substring75
WHERE   substring75 = '12345'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अनुरोध विफल रहा या सेवा ने समय पर प्रतिक्रिया नहीं दी?

  2. Microsoft SQL Server 2008 प्रबंधन स्टूडियो - कनेक्ट/सर्वर/इंस्टेंस समस्या

  3. संग्रहीत प्रक्रिया से डेटा पुनर्प्राप्त करें जिसमें एकाधिक परिणाम सेट हैं

  4. टी-एसक्यूएल:ईमेल प्रारूप की जांच

  5. नेटिव लाइब्रेरी sqljdbc_auth.dll पहले से ही दूसरे क्लासलोडर में लोड है