
题主意思,表a 已经有字段hz,现在要更新py这列?这样的话,只要update就行了,为什么说最好是函数实现呢?还是说题主想要select hz,func(hz) from a 这样的呢?
函数。
首先需要一个解析汉字到拼音的方法,这里有一个包,你可以复制过去直接执行。
脚本地址:
>
附代码:
--不是我不贴,代码太多贴不上,题主还是去上面那个地址复制吧,注意复制全部。在SQL窗口执行。
我这里建了一个测试表test,数据显示如下:
select a from test a;
执行如下代码:
select hz, py || decode(rk, 1, '', rk - 1)from (select rn,
hz,
gethzpygethzfullpy(hz) py,
row_number() over(partition by hz order by rn) rk
from (select rownum rn, hz, py from test) a)
order by rn;
或者:
with t as(select rn,
hz,
gethzpygethzfullpy(hz) py,
row_number() over(partition by hz order by rn) rk
from (select rownum rn, hz, py from test) a)
select hz, py || decode(rk, 1, '', rk - 1) from t order by rn;
显示结果:
题主,如此,可否?
--执行下面语句后,会创建一个标量函数,当想调用的时候如下使用方法即可
--调用执行 select dbofun_getPY('杀毒后')
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(@str,1)
--如果非汉字字符,返回原字符
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (
select top 1 PY
from
(
select 'A' as PY,N'骜' as word
union all select 'B',N'簿'
union all select 'C',N'错'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鳆'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'沤'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'箨'
union all select 'W',N'鹜'
union all select 'X',N'鑂'
union all select 'Y',N'韵'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC
)
else @word
end)
set @str=right(@str,len(@str)-1)
end
return @PY
end
--提取数字
IF OBJECT_ID('DBOGET_NUMBER2') IS NOT NULL
DROP FUNCTION DBOGET_NUMBER2
GO
CREATE FUNCTION DBOGET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBOGET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
--提取英文
IF OBJECT_ID('DBOGET_STR') IS NOT NULL
DROP FUNCTION DBOGET_STR
GO
CREATE FUNCTION DBOGET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBOGET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--提取中文
IF OBJECT_ID('DBOCHINA_STR') IS NOT NULL
DROP FUNCTION DBOCHINA_STR
GO
CREATE FUNCTION DBOCHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-咗]%',@S),1,N'')
RETURN @S
END
GO
PRINT DBOCHINA_STR('呵呵ABC123ABC')
GO
以上就是关于sql 汉字转拼音,若有重复的在拼音加1全部的内容,包括:sql 汉字转拼音,若有重复的在拼音加1、MSSQL 字符串每个字符的拼音首字母的获取、sql 提取数字、字母、汉字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)