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
...全文
191 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 '%[^吖-座]%' 此方法不行 <>等字符都过滤不了
把要查询的字符放进去
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

22,296

社区成员

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

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