经典SQL Server用户自定义函数:首字拼音查询

SQL Server中如何把一个任意汉字转换为该汉字拼音第一个字母 其实我想写这篇文章已经很久了,只是各种条件限制,以至于我不能把我所学到觉得有益于大家的共享出来。我希望说的这个技术能对大家有用,以前我做一个大型系统的时候,曾经自己开发了一套控件,其中之一是可以模糊查询供应商名称的控件,就是操作人员不必从大量的供应商中选择或者输入代码或者写入供应商名称的全民,有点象金山词霸一样的搜索方式。后来有同事开发了其它系统,他们采用操作人员输入汉字拼音的第一个字母方式,我觉 阅读详情
经典SQL Server用户自定义函数:首字拼音查询

/*--获得汉字字符串的首字母

   根据大力的贴子改成.将大力的两个函数合并成了一个函数.
   可以应用于助记码的查询

   作者:邹建
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fGetPy]
GO

--创建取拼音函数
create function fGetPy(@Str varchar(500)='')
returns varchar(500)
as
begin
    declare @strlen int,@return varchar(500),@ii int
    declare @n int,@c char(1),@chn nchar(1)

    select @strlen=len(@str),@return='',@ii=0
    set @ii=0
    while @ii<@strlen
    begin
        select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
        if @chn>'z'
        select @n = @n +1
                    ,@c = case chn when @chn then char(@n) else @c end
            from(
                select top 27 * from (
                    select chn = '吖'
                    union all select '八'
                    union all select '嚓'
                    union all select '咑'
                    union all select '妸'
                    union all select '发'
                    union all select '旮'
                    union all select '铪'
                    union all select '丌'        --because have no 'i'
                    union all select '丌'
                    union all select '咔'
                    union all select '垃'
                    union all select '嘸'
                    union all select '拏'
                    union all select '噢'
                    union all select '妑'
                    union all select '七'
                    union all select '呥'
                    union all select '仨'
                    union all select '他'
                    union all select '屲'        --no 'u'
                    union all select '屲'        --no 'v'
                    union all select '屲'
                    union all select '夕'
                    union all select '丫'
                    union all select '帀'
                    union all select @chn) as a
                order by chn COLLATE Chinese_PRC_CI_AS
            ) as b
        else set @c='a'
        set @return=@return+@c
    end
    return(@return)
end

go
--测试
select dbo.fgetpy('魏保光') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
select dbo.fgetpy('刘子良') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
select dbo.fgetpy('吴过') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人
select dbo.fgetpy('东北') as 姓名拼音,dbo.fgetpy('ab中c国人') as 中国人

--删除拼音函数
drop function fgetpy
 

VBS版

<SCRIPT LANGUAGE=vbscript>
<!--
''''''''''''''''''''''
'提供者:小白
'联系方法:
'E-mail:xiaobai@17560.net
'欢迎大家测试
'针对chenjf网友发现的问题
'小白做了一处修改
'另外,对刘伟强网友的回复是:本函数目前只能获取..?呵呵
'如有不正确的地方,请提出来或是帮忙完善
'谢谢
''''''''''''''''''''''''''''''
function getpychar(char)
tmp=65536+asc(char)
if(tmp>=45217 and tmp<=45252) then
getpychar= "A"
elseif(tmp>=45253 and tmp<=45760) then
getpychar= "B"
elseif(tmp>=45761 and tmp<=46317) then
getpychar= "C"
elseif(tmp>=46318 and tmp<=46825) then
getpychar= "D"
elseif(tmp>=46826 and tmp<=47009) then
getpychar= "E"
elseif(tmp>=47010 and tmp<=47296) then
getpychar= "F"
elseif(tmp>=47297 and tmp<=47613) then
getpychar= "G"
elseif(tmp>=47614 and tmp<=48118) then
getpychar= "H"
elseif(tmp>=48119 and tmp<=49061) then
getpychar= "J"
elseif(tmp>=49062 and tmp<=49323) then
getpychar= "K"
elseif(tmp>=49324 and tmp<=49895) then
getpychar= "L"
elseif(tmp>=49896 and tmp<=50370) then
getpychar= "M"
elseif(tmp>=50371 and tmp<=50613) then
getpychar= "N"
elseif(tmp>=50614 and tmp<=50621) then
getpychar= "O"
elseif(tmp>=50622 and tmp<=50905) then
getpychar= "P"
elseif(tmp>=50906 and tmp<=51386) then
getpychar= "Q"
elseif(tmp>=51387 and tmp<=51445) then
getpychar= "R"
elseif(tmp>=51446 and tmp<=52217) then
getpychar= "S"
elseif(tmp>=52218 and tmp<=52697) then
getpychar= "T"
elseif(tmp>=52698 and tmp<=52979) then
getpychar= "W"
elseif(tmp>=52980 and tmp<=53640) then
getpychar= "X"
elseif(tmp>=53689 and tmp<=54480) then
getpychar= "Y"
elseif(tmp>=54481 and tmp<=62289) then
getpychar= "Z"
else '如果不是中文,则不处理
getpychar=char
end if
end function

function getpy(str)
for i=1 to len(str)
getpy=getpy&getpychar(mid(str,i,1))
next
end function
d="只查"
msgbox getpy(d)
//-->
</SCRIPT>
SqlServer生成拼音首字母函数 Sqlserver生成拼音首字母函数,思路清晰、代码简单。可用于SqlServer各版本中。 立即下载

相关推荐

sqlserver获取汉字的汉语拼音首字母支持多音字

根据汉字获取汉语拼音的首字母,支持多音字 可以自己维护多音字词汇集 使用中有问题可以私信我解决

sql server得到汉字的首字母

ALTER FUNCTION [dbo].[FUN_GETCHINA_NUM](@STR NVARCHAR(4000))  RETURNS NVARCHAR(4000)  AS  BEGIN  DECLARE @WORD NCHAR(1),@PY NVARCHAR(4000)  SET @PY=''  WHILE LEN(@STR)>0  BEGIN  SET @WORD=LEFT

HexianWHH的专栏 874

拼音识别汉字函数(一个SQL函数)

拼音识别汉字函数拼音识别汉字函数拼音识别汉字函数拼音识别汉字函数拼音识别汉字函数拼音识别汉字函数拼音识别汉字函数

Sql server 通过汉字来获取对应拼音首字母的函数

今天刚好同事遇到一个关于将 【药品名称】转换为【拼音简写】的问题,如:复方草珊瑚含片---FFCSHHP, 研究了以下,参考了网上的一些方法,写了如下的标量值函数来解决这个问题。 create function fun_getPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nc...

dengxunfu6344的博客 771

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

从CCD数据上报看wxHOOK的封号风险与规避

本文深入分析了微信CCD数据上报机制对wxHOOK的检测逻辑与封号风险,揭示了调试器路径暴露、非白名单DLL加载和内存校验失败等关键风险点。通过实战案例和规避方案,帮助开发者理解如何安全使用wxHOOK技术,避免封号风险,包括内存镜像欺骗、内核级隐蔽和硬件辅助方案等高级技巧。

weixin_27875131的博客 627

SQLServer汉字(转拼音首字母,转全拼音函数)

方法一sqlserver汉字转拼音首字母 --方法一sqlserver汉字转拼音首字母 --调用方法 select dbo.procGetPY ('中國') Create FUNCTION dbo.procGetPY ( @str NVARCHAR(4000) ) /* select dbo. procGetPYFirstLetter ('中國') */ RETURNS NVARCHAR(4000) --WITH ENCRYPTION AS BEGIN DECLARE @WORD NCHA

极客神殿 3997

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

sqlserver 自定义函数汉字转拼音或首字母

执行下面sql 就自定义函数了View CodegoASBEGINset @PY=''BEGIN--如果非汉字字符,返回原字符then (fromselect 'A' as PY,N'驁' as wordunion all select 'B',N'簿'union all select 'C',N'錯'union all select 'D',N'鵽'union all select 'E',N'樲'union all select 'F',N'鰒'

阿涩的博客 2957

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3842

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

SqlServer 获取汉字的拼音首字母

一、该函数传入字符串,返回数据为:如果为汉字字符,返回该字符的首字母,如果为非汉字字符,则返回本身。二、用到的知识点:汉字对应的UNICODE值,汉字的排序规则。三、数据库函数: CREATE FUNCTION GetInitialLetter(@ChineseString NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @...

weixin_33670786的博客 873

IIC协议常见误区解析:从时序图到实际波形(附逻辑分析仪实测)

本文深入解析IIC协议在实际应用中的常见误区,从理想时序图到逻辑分析仪实测波形的差异,揭示通信故障的根本原因。通过硬件设计优化、软件时序调优和高级调试技巧,帮助开发者有效规避IIC通信中的隐形陷阱,提升系统稳定性。

weixin_28738397的博客 370

sql server自动生成拼音首字母的函数

建立一个查询,执行下面的语句生成函数fn_GetPy --生成拼音首码    CREATE  function  fn_GetPy(@str  nvarchar(4000))    returns  nvarchar(4000)    --WITH  ENCRYPTION    as    begin    declare  @intLen int    declare  @strRet nv

Lucker's PowerSpace 8546

HyperLynx(十八)DDR(一)DDR简介和DDR的数据仿真

LVTTL电平为单端信号,而SSTL电平本质上是差分对,其实现机制是将信号与参考电平Vref组成差分对进行比较,如图所示,VIH和VIL各有一个交流参数AC和直流参数DC,信号第一次越过AC门限的时刻,作为时序计算的参考点,此后只要信号保持DC门限内,逻辑状态保持不变,这种设计减小了噪声、振铃等对于信号质量的影响。经过调整后,控制器在发送颗粒1的DQS后,延时1ns再发送颗粒2的DQS,则颗粒1在1ns后收到对齐的DQS和CLK,颗粒2在2ns后收到对齐的DQS和CLK,从而满足了时序关系。

小幽余生不加糖 7676

【VTKExamples::PolyData】第十六期 GradientFilter

本文分享VTK样例GradientFilter,并解析接口vtkGradientFilter & vtkAssignAttribute,希望对各位小伙伴有所帮助!

qq_40041064的博客 319

Microsoft SQL Server 编写汉字转拼音函数

在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作,扩大搜索范围,为提高精度而提供基础范围数据。因此按汉字拼音搜索,即可以进一步简化输入,又可以进一步扩大搜索范围。

初九之潜龙勿用 5505

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[sql server] 取汉字 拼音 首字母

--取汉字 拼音 首字母 create function fun_getPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1),@PY nvarchar(4000) set @PY='' while len(@str)>0 begin set @word=left

永生天地 3288

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Microsoft SQL Server 自定义函数整理大全--【叶子】

SQL SERVER中是允许有自定义函数,Microsoft SQL Server 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。 函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。尽管自定义函数在数据量庞大的时候,效率上有欠缺,但是在中小型数据库中,还是可以使用,现将我数据库中所

沧海一叶点滴心得 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

oracle 拼音首字母查询,sql中根据汉字的拼音首字母查询的函数

/****** Object: UserDefinedFunction [dbo].[f_GetPy] Script Date: 06/09/2010 10:31:33 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate function [dbo].[f_GetPy](@str nvarchar(4000))ret...

weixin_28878287的博客 281

在SQL中创建用户自定义拼音函数

--在SQL中创建用户自定义拼音函数: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetPy]') and xtype in (N'FN', N'IF', N'TF'))

jnu2003的专栏 475

SQL汉字首字母查询处理用户定义函数

CREATE FUNCTION f_GetPY(@str nvarchar(4000))RETURNS nvarchar(4000)ASBEGIN DECLARE @py TABLE(  ch char(1),  hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,  hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS) 

DillonHunter的专栏 1342

SQL Server根据汉字笔划和取得拼音首字母进行排序

         做房产网站,已经有了小区模板表,将小区的名称一律输入数据表中供登记用户进行选择。发现一个排序的问题:小区名称加载至下拉列表中时默认只是按照主键进行了升序排序,无任何规律,名称找起来非常麻烦。如何按小区名称第一个汉字的首字母进行排序?可原小区模版中并无拼音首字母字段。改数据表是不可行的,有几个系统都在使用此表,改动量巨大。于是决定从排序规则入手,参考有关资料进行解决。     

~~~徐长伟~~~ 6299

sql server 自定义函数

SQL SERVER中是允许有自定义函数,Microsoft SQL Server 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。 函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。尽管自定义函数在数据量庞大的时候,效率上有欠缺,但是在中小型数据库中,还是可以使用,现将我数据库中所有的自定义

goright12的专栏 902

生成汉字拼音首字母函数!

createfunctionfun_getPY(@strnvarchar(4000)) returnsnvarchar(4000) as begin declare@wordnchar(1),@PYnvarchar(4000) set@PY='' whilelen(@str)>0 begin set@word=left(@str,1) --如果...

deqiping4837的博客 240
上一篇: 得到汉字笔画
下一篇: SqL四种写法测试结果
no_mIss
博客等级 码龄21年 9粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值