根據漢字聲母,在表中找相關記錄。比如輸入"zgyh",就能找到所有“中國銀行”的記錄。

來源:互聯網
上載者:User
漢字
根據漢字聲母,要在表中找相關記錄,怎麼實現?比如輸入"zgyh",就能找到所有“中國銀行”的記錄。

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetPy]') and xtype in (N'FN', N'IF', N'TF'))
 drop function [dbo].[f_GetPy]
GO

--建立取拼音函數
create function f_GetPy(@Str nvarchar(400))
returns nvarchar(4000)
as
begin
 declare @strlen int,@re nvarchar(4000)
 declare @t table(chr nchar(1) collate Chinese_PRC_CI_AS,letter nchar(1))
 insert @t select '吖','A' union all select '八','B'
 union all select '嚓','C' union all select '咑','D'
 union all select '妸','E' union all select '發','F'
 union all select '旮','G' union all select '鉿','H'
 union all select '丌','J' union all select '哢','K'
 union all select '垃','L' union all select '嘸','M'
 union all select '拏','N' union all select '噢','O'
 union all select '妑','P' union all select '七','Q'
 union all select '呥','R' union all select '仨','S'
 union all select '他','T' union all select '屲','W'
 union all select '夕','X' union all select '丫','Y'
 union all select '帀','Z'

 select @strlen=len(@str),@re=''
 while @strlen>0
 begin
  select top 1 @re=letter+@re,@strlen=@strlen-1
  from @t a where chr<=substring(@str,@strlen,1)
  order by chr desc
  if @@rowcount=0
   select @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1
 end
 return(@re)
end
go

--測試
select dbo.f_GetPy('東莞市') as 東莞市,dbo.f_GetPy('ab中c國人') as 中國人

--以後查詢的時候,就可以調用上面的函數來實現漢字模糊查詢

select * from 表 where dbo.f_getpy(欄位)='zgyh'



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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