मान लें कि आपके पास इस प्रारूप में फ़ील्ड हैं:
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'