求SQL语句或函数(200分)

  • 主题发起人 主题发起人 baobao2601
  • 开始时间 开始时间
B

baobao2601

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL SERVER数据库,有一个字段里的内容有英文和中文,用SQL语句如何过滤只取英文与数字,或只取中文?
 
ASCII < 128 的 为英文(数字)
 
建议如果把这个字段取出来后在前台处理,一字符一个字符的判断比较容易.<br>如果是需要查询出一个这样的数据集,建议在向数据库中保存的时候进行处理,一方便查询出来.<br>否则在SQL语句中也是要用ASCII(SUBSTRING())函数,一个字符,一个字符的判断,比较麻烦
 
/*此函数用于去除字符串中非允许存在的字符,允许的字符集可以用AllowLetter定义*/<br>/*中文汉字在字符串里还是保留的*/<br>CREATE FUNCTION LetterOnly ( @oldStr nvarchar(500) ) &nbsp;<br>RETURNS nvarchar(500) &nbsp;AS &nbsp;<br>BEGIN <br>declare @AllowLetter varchar(50), @NotAllowLetter varchar(500), &nbsp;@Returns nvarchar(500)<br>declare @i integer<br>select @AllowLetter='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'<br>select @NotAllowLetter=' ̄!@#¥%^&*()_-+=|、{}《》[]:;<>,。、?“”‘‘’ '<br>select @i=1<br>select @OldStr=upper(@OldStr)<br>select @Returns=''<br>while @i &lt;= len(@OldStr)<br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; if &nbsp;(ascii(substring(@OldStr, @i, 1)) &gt;= 128 ) and &nbsp;(charindex( substring( @OldStr, @i, 1), @NotAllowLetter ) =0) <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select @Returns=@Returns+ substring( @OldStr, @i, 1)<br>&nbsp; &nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if charindex( substring( @OldStr, @i, 1), @AllowLetter ) &gt;0<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select @Returns=@Returns+ substring( @OldStr, @i, 1)<br>&nbsp; &nbsp; &nbsp;select @i=@i+1<br>&nbsp; end<br>return @Returns<br><br>END<br><br><br>参考这个函数,自己再做就不难了。
 
每個字符去取,再判斷是否在A~Z或0~9之內,如是則讀取出來,如否則不讀取出來,
 
还有好的方法吗?
 
后退
顶部