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

कैरेक्टर मैपिंग / एसक्यूएल सर्वर 2008 R2 में कैरेक्टर द्वारा कैरेक्टर को खोजें और बदलें

क्या यह आपके लिए और तेज चलता है? (मैंने SQL_Latin1_General_CP1_CS_AS के अपने संयोजन का उपयोग किया है, हो सकता है कि आप इसे बदलना चाहें)।

ALTER FUNCTION [dbo].[ArabicToString] (@inString VARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @MappingCharacters TABLE
    (
        InputCharacter NCHAR(1) COLLATE SQL_Latin1_General_CP1_CS_AS PRIMARY KEY,
        OutputChar NCHAR(1)
    )

    INSERT @MappingCharacters
    VALUES
        ('A', 'ء')
        ,('B', 'آ')
        ,('C', 'أ')
        ,('D', 'ؤ')
        ,('E', 'إ')
        ,('F', 'ئ')
        ,('G', 'ا')
        ,('H', 'ب')
        ,('I', 'ة')
        ,('J', 'ت')
        ,('K', 'ث')
        ,('L', 'ج')
        ,('M', 'ح')
        ,('N', 'خ')
        ,('O', 'د')
        ,('P', 'ذ')
        ,('Q', 'ر')
        ,('R', 'ز')
        ,('S', 'س')
        ,('T', 'ش')
        ,('U', 'ص')
        ,('V', 'ض')
        ,('W', 'ط')
        ,('X', 'ظ')
        ,('Y', 'ع')
        ,('Z', 'غ')
        ,('a', 'ف')
        ,('b', 'ق')
        ,('c', 'ك')
        ,('d', 'ل')
        ,('e', 'م')
        ,('f', 'ن')
        ,('g', 'ه')
        ,('h', 'و')
        ,('i', 'ى')
        ,('j', 'ي')
        ,('v', 'ـ')
        ,('1', '١')
        ,('2', '٢')
        ,('3', '٣')
        ,('4', '٤')
        ,('5', '٥')
        ,('6', '٦')
        ,('7', '٧')
        ,('8', '٨')
        ,('9', '٩')
        ,('0', '٠')
        ,('/', '\')

    DECLARE @Result NVARCHAR(MAX) = ''
        , @Position INT = 1
        , @StrLength INT = DATALENGTH(@inString)

    DECLARE @Vchar char(1), @NextChar NCHAR(1)

    SET @VChar = SUBSTRING(@inString, @Position, 1)
    IF ASCII(@Vchar) > 189 and ASCII(@Vchar) < 255 
    RETURN Rtrim(Ltrim(@inString))

    WHILE (@Position <= @StrLength)  -- leave loop if bad character found
    BEGIN
        -- Reset holders
        SET @NextChar = SUBSTRING(@inString, @Position, 1)

        SET @Result = @Result + ISNULL((SELECT OutputChar FROM @MappingCharacters MC WHERE InputCharacter = @NextChar COLLATE SQL_Latin1_General_CP1_CS_AS), @NextChar)

        -- Add one to position 
        SET @Position= @Position + 1
    END

  RETURN Rtrim(Ltrim(@Result))
END
GO

यह बहुत समान है, लेकिन मुझे उम्मीद है कि else if . की एक बहुत बड़ी श्रृंखला के बजाय जाँच करता है, SQL सर्वर एक सेट के साथ काम करते समय बेहतर प्रदर्शन करेगा। मुझे यकीन नहीं है कि यह बेहतर काम करेगा अगर @MappingCharacters एक वास्तविक तालिका थी या नहीं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में विशिष्ट रिकॉर्ड के लिए स्क्रिप्ट बनाना

  2. T-SQL का उपयोग करके SQL सर्वर डेटाबेस के पुनर्प्राप्ति मॉडल को कैसे बदलें

  3. SQL सर्वर तालिका में पहचान कॉलम मान को कैसे रीसेट करें - SQL सर्वर / T-SQL ट्यूटोरियल भाग 43

  4. Sql Server 2008 में तीन तालिकाओं से मिलान डेटा

  5. अस्थायी तालिका के साथ काम नहीं कर रहा इकाई की रूपरेखा