SQL Server中如何把一個任意漢字轉換為該漢字拼音第一個字母

來源:互聯網
上載者:User

其實我想寫這篇文章已經很久了,只是各種條件限制,以至於我不能把我所學到覺得有益於大家的
共用出來。
我希望說的這個技術能對大家有用,以前我做一個大型系統的時候,曾經自己開發了一套控制項,其中
之一是可以模糊查詢供應商名稱的控制項,就是操作人員不必從大量的供應商中選擇或者輸入代碼或者
寫入供應商名稱的全民,有點象金山詞霸一樣的搜尋方式。後來有同事開發了其它系統,他們採用操作
人員輸入漢字拼音的第一個字母方式,我覺得很好,但是後來才知道這些輸入的拼音是建立資料的時候
增加一列來儲存這個拼音的,這種情況給我很大啟發,如何才能把一個任意漢字轉換為該漢字拼音第一個字母呢?我在網上下載了一個Delphi程式的代碼,裡面有絕大部分漢字對應的拼音,我經過處理把這些資料
植入了資料庫並且做了些加工,然後我編寫了一個資料庫函數來轉換。
功能就這樣實現了,我把這個函數代碼貼上來了,但是資料庫的拼音對照表的資料有幾萬條,所以
我以後指定一個地址讓各位有興趣的朋友去下載。
至於效率問題我做過測試:256M記憶體,2.0G賽揚,轉換8萬個漢字需要時間在3秒鐘左右,當然這個功能
主要應用於資料量在幾百幾千的表,主要為操作人員提供方便.
CREATE  FUNCTION dbo.SpellCode (
                    @stText     as varchar(1000)
)
RETURNS varchar(1000) as
BEGIN
          
          declare
                 @ReturnValue as varchar(1000),
                 @highvalue    as int,
                 @lowvalue     as int,
                 @APy             as varchar(10)

            set @ReturnValue=''
            while ( Len(@stText)>0)
            begin
                   if (left(@stText,1)>='a' and left(@stText,1)<='z')  or (left(@stText,1)>='A' and left(@stText,1)<='Z') or (left(@stText,1)>='0' and left(@stText,1)<='9')
                   begin
                        set  @ReturnValue=@ReturnValue+Upper(left(@stText,1))
                        set @stText=right(@stText,len(@stText)-1) 
                        continue
                  end

                  set @lowvalue=ascii(left(@stText,1))
                  if @lowvalue<=128                 --控制字元及特殊字元不予處理
                  begin
                        --set  @ReturnValue=@ReturnValue+Upper(left(@stText,1))  如果需要可以顯示
                        set @stText=right(@stText,len(@stText)-1) 
                        continue
                  end
                  set @highvalue=cast(cast(left(@stText,1) as varbinary) as int)-@lowvalue*256
                  if @lowvalue=166 --希臘字母
                  begin
                        set @Apy=
                        case when @highvalue>=161 and @highvalue<=184 then (select left(infovalue,1) from ChineseSpellS where rowid=@highvalue-160 and typeinfo=3)
                                 when @highvalue>=193 and @highvalue<=216 then (select left(infovalue,1) from ChineseSpellS where rowid=@highvalue-192 and typeinfo=3 )
                        end
                        set  @ReturnValue=@ReturnValue+Upper(@Apy)
                        set @stText=right(@stText,len(@stText)-1)
                        continue                        
                  end
                  -- 獲得拼音索引
                  select @Apy=left(infovalue,1) from ChineseSpell with (nolock) where rowid=@lowvalue-128 and subid=@highvalue-63
                  if @Apy is null  set @Apy=dbo.ChToEn(left(@stText,1))
                  set @ReturnValue = @ReturnValue + upper(@APy)

                  set @stText=right(@stText,len(@stText)-1) 
          end

         return @ReturnValue
END

 

 

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.