sql 字符首字母展示中遇到 N多 特殊符号时的问题!

tangtang89522 2011-06-16 09:47:42
贴一下我目前的函数,目前函数中存在的问题是针对很多特殊的字符,只能发现一个 过滤掉一个。这个方法很笨。想请教一下各位,什么方法可以过滤掉所有的特殊字符!
提供以下 特殊的数据:(估计还有很多我想不到的奇奇怪怪的字符,总之这个目前没找到合适的方法可以过滤掉!)
测试<》>!:,.。}】【)
。。。。。

alter FUNCTION [dbo].[uf_getpinyin](@str nvarchar(4000))
returns nvarchar(4000)
--WITH ENCRYPTION
AS
--生成拼音首码
BEGIN
DECLARE @strlen INT,@return VARCHAR(500),@i INT
DECLARE @n INT,@c CHAR(1),@chn NCHAR(1), @word nchar(1),@str_new nvarchar(4000)
--把特殊字符去掉
select @str_new=''--,@str=dbo.uf_convert(@str,0) 此处会把半角变成全角
while len(@str)>0
begin
set @word=left(@str,1)
IF @word --like '%[0-9a-zA-Z]%' or @word like '%[^吖-座]%' 此方法不行 <>等字符都过滤不了
NOT IN (',','、','。',';',':','(',')','【','】','“','”','‘','’','(',')','·','-','+','.','Ⅱ','Ⅰ','Ⅱ','<','>')
set @str_new=@str_new+@word
set @str=right(@str,len(@str)-1)
end

SELECT @strlen=LEN(@str_new),@return='',@i=0
SET @i=0
WHILE @i<@strlen
BEGIN
SELECT @i=@i+1,@n=63,@chn=substring(@str_new,@i,1)
IF @chn>'z'
BEGIN

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
END
ELSE
SET @c=(case when ISNUMERIC(@chn)=1 then (
select JC from (
SELECT ZM='1',JC='Y'
union all select '2', 'E'union all select '3', 'S'union all select '4', 'S'union all select '5', 'W'union all select '6', 'L'union all select '7', 'Q'
union all select '8', 'B' union all select '9', 'J' union all select '0', 'L' ) a
where ZM=@chn) else @chn end)
SET @return=@return+@c
END
RETURN(@return)
END
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangtang89522 2011-06-16
  • 打赏
  • 举报
回复
目前就是 按照您说的 把需要的整成一个集合 的。。
需要的字符 就是 数字 字母(这个可以弄出来) 汉字的弄不出来

由于 汉字整不出来。所以 我只能把不需要的字符找到一个 NOT IN 一个。。我觉得此方法 很有问题。。。
cd731107 2011-06-16
  • 打赏
  • 举报
回复
要么找出所有不要的字符,弄成一个集合,使用not in
要么找出所有需要的字符,弄成一个集合,使用 in
tangtang89522 2011-06-16
  • 打赏
  • 举报
回复
如果可以把有地方 可以把汉字 都挑出来 就好了。。就像数字和字母那样 很明确 。。
tangtang89522 2011-06-16
  • 打赏
  • 举报
回复
我就是反着 过来的。。只要数字 字母 和汉字。可是汉字 的那个有麻烦。。比如 <,>等字符 它也符合 like '%[^吖-座]%' ,我的要求是 这些 符号都不能展示出来。。
水族杰纶 2011-06-16
  • 打赏
  • 举报
回复
反过来考虑看看
正如
--like '%[0-9a-zA-Z]%' or @word like '%[^吖-座]%' 此方法不行 <>等字符都过滤不了
把要查询的字符放进去

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧