उच्चारण असंवेदनशील टकराव का उपयोग करके इस समस्या को हल किया जा सकता है ।
आपका डेटाबेस संभवतः AS (Accent Sensitive) समतलीकरण का उपयोग कर रहा है, इसलिए डिफ़ॉल्ट रूप से यह लहजे सहित सटीक मिलान की खोज करेगा।
आप तुलना के साथ टकराव को निर्दिष्ट करके डेटाबेस डिफ़ॉल्ट की तुलना में एक और टकराव का उपयोग करने के लिए WHERE क्लॉज़ को निर्देश दे सकते हैं।
में इस dbfiddle मैं एक उदाहरण latin1 collations उपयोग कर बनाई गई हैं, लेकिन आप मिलान तुम सिर्फ मिलान अपने स्तंभ वर्तमान में उपयोग कर रहा है के लिए में ऐ के रूप में बदल कर प्रयोग कर रहे हैं के साथ एक ही दृष्टिकोण का उपयोग कर सकते हैं।
एक्सेंट इंसेंटिव कोलाजेशन का उपयोग करें जो कोलम के उपयोग से मेल खाता है। उदाहरण के लिए, यदि स्तंभ का उपयोग किया जाता है SQL_Latin1_General_CP1_CI_AS
, तो उपयोग करें या SQL_Latin1_General_CP1_CI_AI
नहीं Latin1_General_CI_AS
या Latin1_General_100_CI_AS
उन दोनों में से कोई भी भिन्नता नहीं है क्योंकि गैर-SQL_ कोलाजेशन का व्यवहार केवल उच्चारण-असंवेदनशीलता की तुलना में अधिक तरीकों से भिन्न होगा, और यह उपयोगकर्ताओं द्वारा अपेक्षित नहीं हो सकता है।
आप वर्तमान टकराव की जांच कर सकते हैं sys.columns
।
CREATE TABLE testaccent (name nvarchar(50));
GO
INSERT INTO testaccent (name) VALUES ('Millière') , ('Milliere');
GO
-- returns Miliere
SELECT * FROM testaccent WHERE name = 'Milliere';
-- returns both
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AI
--only returns Miliere
SELECT * FROM testaccent WHERE name='Milliere' COLLATE Latin1_General_CI_AS
अधिक जानकारी के लिए SQL सर्वर Collations का उपयोग करके पढ़ें ।
तो फिर आप शायद इस कोलाज का उपयोग करना चाहते हैं (जैसा कि peufeu ने टिप्पणियों में उल्लेख किया है) यह सुनिश्चित करने के लिए कि "e" "e" के साथ सॉर्ट करें। अन्यथा, कोई व्यक्ति जो वर्णमाला के क्रम में परिणामों से गुजरता है, तो "é" को नहीं पाकर आश्चर्यचकित हो जाएगा, जहां वे उनसे होने की उम्मीद करते हैं, लेकिन यदि आप केवल इस क्वेरी को छूना चाहते हैं, तो आप COLLATE
क्लॉज को ORDER BY
भी जोड़ सकते हैं ।
जैसा कि टिप्पणियों में सोलोमन रुट्ज़की ने कहा है , यदि यह केवल 1 या कुछ कॉलम को प्रभावित करता है, तो एक और विकल्प एक गैर-निरंतर कम्प्यूटेड कॉलम बनाना है जो केवल "नाम" कॉलम को दोहराता है और उच्चारण असंवेदनशील टकराव प्रदान करता है, और फिर गणना को अनुक्रमित करता है। स्तंभ। यह क्वेरी के भीतर टकराव को बदलने के कारण स्कैन से बचा जाता है। फिर क्वेरी को नए कॉलम पर फ़िल्टर करने की आवश्यकता है।
कुछ इस तरह:
ALTER TABLE
dbo.[table_name] ADD [SearchName] datatype_of_name_column
AS ([Name] COLLATE LATIN1_GENERAL_100_CI_AI));
CREATE INDEX [IX_table_name_SearchName]
ON dbo.[table_name] ([SearchName] ASC);
या आप एक संगणित कॉलम (जैसा कि joi पसंद करते हैं) को जोड़ने के बजाय एक दृश्य भी बना सकते हैं ।