2015-12-14 2 views
11

मेरे पास मेरी तालिका में स्ट्रिंग मान हैं जिनमें हिब्रू वर्ण (या इस मामले के लिए कोई आर-टी-एल भाषा) और अंग्रेज़ी वाले (या संख्याएं) शामिल हैं।एसक्यूएल का उपयोग कर मिश्रित बाएं से दाएं और दाएं से बाएं भाषाओं के साथ स्ट्रिंग में वर्णों को उलट दें?

समस्या यह है कि अंग्रेजी वर्णों को उलट दिया जाता है और ऐसा लगता है: בדיקה 123456 esrever sti fI kcehC। संख्याओं और अंग्रेजी वर्णों को उलट दिया जाता है, हिब्रू लोग ठीक हैं।

मैं अंग्रेजी सबस्ट्रिंग (और संख्याओं) की पहचान करने के लिए एसक्यूएल फ़ंक्शंस में निर्मित कैसे उपयोग कर सकता हूं और अन्य आरटीएल अक्षरों पर ऑर्डर बनाए रखने के दौरान इसे उलट सकता हूं? कोई वैकल्पिक हल मैं हिब्रू पात्रों के साथ काम नहीं किया है इसलिए मुझे यकीन है कि अगर यह काम करेगा नहीं कर रहा हूँ :-) क्या करेंगे ... धन्यवाद

+1

स्वीकार किए जाते हैं जवाब यहाँ आप के लिए कुछ काम का हो सकता है: http://stackoverflow.com/questions/22459446/how-to-fix-reversed-arabic-characters-mixed-with-english- इन-एसक्यूएल-सर्वर – beercohol

+0

क्या यह केवल अंग्रेज़ी तक ही सीमित है? क्या होगा अगर फ्रेंच, स्वीडिश, या यहां तक ​​कि जर्मन टेक्स्ट एस्ज़ेट चरित्र के साथ डबल एस के बदले में? – NicVerAZ

उत्तर

0

,

हालांकि मुझे लगता है कि आप थोड़ी देर के साथ एक समारोह को लागू कर सकते पाश का उपयोग कर PATINDEX

  • आप उलट अंग्रेज़ी हिस्सा एक चर पकड़े @EngTemp
  • सबस्ट्रिंग वर्तमान में @SubTemp
  • एक चर में शेष पाठ नहीं पकड़ करने के लिए कार्रवाई की जा रही धारण करने के लिए के लिए एक चर की आवश्यकता होगी ट्रिंग अभी भी जरूरत है कि @SubNext
  • एक चर संसाधित करने के लिए @Len वर्तमान सबस्ट्रिंग की लंबाई धारण करने के लिए
  • @Out

कदम एक आउटपुट चर:

  • एक स्ट्रिंग इनपुट ले लो , यह @SubNext में डाल दिया, जबकि PATINDEX ('% [^ az]%', @SubNext)> 0
  • @SubTemp में पैट सूचकांक की दुकान में सबस्ट्रिंग, यह भी PATINDEX को @SubNext ट्रिम
  • @Lub
  • में @SubTemp की लंबाई को स्टोर करें यदि @Len> 1; @Out = @Out + @EngTemp + @SubTemp सेट करें; @EngTemp = '' सेट करें (यह चरण संभावना मानता है कि ऐसे मामले हो सकते हैं जहां अंग्रेजी स्ट्रिंग लाइन का अंत नहीं है)
  • यदि @Len = 1; @EngTemp = @SubTemp + @EngTemp
  • सेट करें यदि @Len = 0; सेट @Out = @Out + @EngTemp (इस बिंदु पर पाश भी बंद हो जाना चाहिए)

मैं जब मैं कुछ समय और बाद वास्तविक कोड है इस के साथ खेलने के लिए जा रहा हूँ, खेद मेरी आड़ी-तिरछी रेखाएं नहीं करता है, तो ' टी कोई समझ नहीं

1

मेरा मानना ​​है कि आपकी पूरी स्ट्रिंग उलटी हुई है और तथ्य यह है कि हिब्रू शब्द सही क्रम में प्रदर्शित होते हैं वास्तव में एक अलग समस्या का परिणाम है। मुझे संदेह है कि हिब्रू शब्द एक गैर-शब्दावली क्रम में संग्रहित होते हैं।

सिद्धांत में आप केवल स्ट्रिंग को उलटकर अपनी समस्या को हल करने में सक्षम होना चाहिए और फिर बाएं से दाएं अरबी शब्दों को प्रदर्शित करने के लिए SQL सर्वर को मजबूर करना चाहिए।यह इस प्रकार सामने और अपने स्ट्रिंग के पीछे एक विशेष वर्ण जोड़कर किया जाता है:

DECLARE @sourceString NVARCHAR(100) = N'123456 בדיקה esrever sti fI kcehC'; 

    DECLARE @reversedString NVARCHAR(4000) = nchar(8237) + REVERSE(@sourceString) + nchar(8236) 

    SELECT @reversedString; 
0

आप DB में पाठ क्षेत्र में पात्रों में से ascii मूल्य प्राप्त करने के लिए एसक्यूएल सर्वर में ASCII फ़ंक्शन का उपयोग कर सकते हैं। एक बार आपको एसीआईआई मूल्य प्राप्त हो जाने के बाद, अंग्रेजी दृश्यमान वर्णों और अंकों की वैध सीमा के विरुद्ध इसकी तुलना करें। कुछ और हिब्रू चरित्र के रूप में माना जा सकता है।

इसके अलावा स्ट्रिंग को स्वचालित रूप से स्ट्रिंग को उलटाने के लिए SQL सर्वर में स्वचालित रूप से कार्य मौजूद है।

निम्नलिखित लिंक में कुछ नमूना कोड है।

http://www.sqlservercurry.com/2009/09/how-to-find-ascii-value-of-each.html

संबंधित मुद्दे