none
分辨欄位中的中文字 RRS feed

  • 問題

  •  

    如題

    如果一個欄位裡有中文英文以及數字,如果我想把中文去掉只留下其他的文字的話,SQL是否有提供這樣的函數呢?

    或是有什麼文件可以參考的?請各位先進指教....

    2008年4月14日 下午 12:17

所有回覆

  • 沒有現成的!

     

    你可能要自己寫 CLR 或寫 T-SQL 才有可能做到。

     

    原理大概像這樣:Stripping HTML from text in SQL Server 2005

     

    我大概提供方向(我自己沒寫過),你可透過 STUFFASCII 函數搭配寫出一些判斷將不要的字元濾掉。
    2008年4月14日 下午 12:47
  • 謝謝你提供的資訊

    幫忙很大(不過還沒寫出來)

    2008年4月15日 上午 10:02
  • 寫 CLR 的話,下列 C# 程式碼給你做參考,主要利用 Regex.Replace() 將中文用空白字串取代

    string s1 = "1234567890中文abcdeABCDE測試~!@#$%^&*()_+";
    string s2 = Regex.Replace(s1, @"[\u4e00-\u9fa5]", string.Empty);
    MessageBox.Show(s2);

    // OUTPUT: 1234567890abcdeABCDE~!@#$%^&*()_+


    2008年4月15日 上午 10:13
  • 感謝大大提供C# CRL 的程式碼

    但小弟仍有一事想請教因為我的工作環境在Query Analyzer 中

    所以想請一下 @"[\u4e00-\u9fa5]"==>這個是什麼意思呢?是中文字集的16進位元的CODE嗎?

    如果換到Qery Analyzer中這句與法要怎麼處理?

    煩請大大不吝賜教
    2008年4月23日 上午 10:57
  • 微軟並無提供類似函數..
    以下是我多年前寫的,希望對你有幫助

    -- =============================================
    -- Author:       
    -- Create date:
    -- Description:    回傳消除掉中文字的字串
    -- =============================================
    CREATE FUNCTION [dbo].[Train_SingByie_CHAR](@xTo_StringData VarChar(1000))
    RETURNS VarChar(1000)
    AS
    BEGIN
        Declare @Str_Len Int , @Count_Num INT = 1 , @Return_Str VarChar(1000) = ''
        
        Select @Str_Len = LEN(@xTo_StringData)

        While @Count_Num <= @Str_Len
        Begin
            IF ASCII(SubString(@xTo_StringData,@Count_Num,1)) < 127
            BEGIN
                Select @Return_Str = @Return_Str + SubString(@xTo_StringData,@Count_Num,1)
            END
            Select @Count_Num = @Count_Num + 1
        End

        Return @Return_Str

    END

    2019年4月27日 上午 07:02