sql-server – 如何在sql server 2005中选择包含非英文字符的行(
由于我的表包含非英语(包含不同语言的字符)字符和列中的特殊字符.我只需要过滤非英文字符.它应该过滤任何特殊字符.
我尝试使用不同的方法进行过滤,但未能过滤几行.有人请帮帮我.提前致谢. 例如: 第1排:??????????????????????,北街,Idyanvillai,泰米尔纳德邦,印度 第2行:Dr.Hakim M.Asgar Ali的ROY MEDICAL CENTER?Unani诊所位于印度喀拉拉邦,Thycaud Hospital Road,Opp. Amritha Hotel,Thycaud.P.O.,Thiruvananthapuram,喀拉拉邦,印度 第3行:???????????? ????????,Shivaji Nagar,Davangere,印度卡纳塔克邦 由于上面包含许多语言的字符.任何人都可以帮我选择第2行谢谢. 解决方法T-SQL的字符串处理能力非常简陋.如果通过使用Unicode UTF-16来区分“非英语”字段,您可以尝试类似的东西 SELECT * FROM MyTable WHERE MyField = Cast(MyField AS VARCHAR) 仅拉出UTF-8中可表达的行. 我知道如何测试字段是否从任意字符集中绘制的唯一方法是使用user-defined function,如下所示: CREATE FUNCTION IsAllowed (@input VARCHAR(MAX)) RETURNS BIT -- Returns 1 if string is allowed,0 otherwise. -- Usages: SELECT dbo.IsAllowed('Hello'); -- returns 1 -- SELECT dbo.IsAllowed('Hello,world!'); -- returns 0 -- Note CHARINDEX is not case sensitive so @allowables doesn't need both. -- VARCHAR(MAX) is different under SQL Server 2005 than 2008+ --- and use of defined VARCHAR size might be necessary. AS BEGIN DECLARE @allowables char(26) = 'abcdefghijklmnopqrstuvwxyz'; DECLARE @allowed int = 0; DECLARE @index int = 1; WHILE @index <= LEN(@input) BEGIN IF CHARINDEX(SUBSTRING(@input,@index,1),@allowables)=0 BEGIN SET @allowed = 0; BREAK; END ELSE BEGIN SET @allowed = 1; SET @index = @index+1; END END RETURN @allowed END 用户定义的函数可以应用于SELECT中的列,如下所示: SELECT * FROM MyTable WHERE dbo.IsAllowed(MyField) = 1 请注意,模式名称(在本例中为dbo)对于用户定义的函数不是可选的. 如果T-SQL用户定义的函数不合适,您也可以使用CLR Function.然后您可以将regexp或其他任何内容应用于列.由于它们会破坏可移植性并带来安全风险,因此许多系统管理员不允许使用CLR功能. (这包括Microsoft的SQL Azure产品.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sqlserver 数据库 里面有数据 怎么生成 插入语句 把里面的数
- MongoDB使用自带的命令行工具进行备份和恢复的教程
- sql-server – 在MSSQL中查询返回特定数据库的.mdf和.ldf文
- sqlserver 脚本和批处理指令小结
- 详解java调用ffmpeg转换视频格式为flv
- sql – 当两个表的外键相互引用时如何删除记录?
- sql – GROUP BY子句之后的Oracle CONNECT BY子句
- sql-server – 什么时候启动触发器,什么时候触发它们
- sql-server-2008 – 如何在镜像时解决sql server中的错误:
- sqlserver 中NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCK