加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在sql server 2005中选择包含非英文字符的行(

发布时间:2020-12-12 16:25:24 所属栏目:MsSql教程 来源:网络整理
导读:由于我的表包含非英语(包含不同语言的字符)字符和列中的特殊字符.我只需要过滤非英文字符.它应该过滤任何特殊字符. 我尝试使用不同的方法进行过滤,但未能过滤几行.有人请帮帮我.提前致谢. 例如: 列名称LOCATION包含以下行: 第1排:??????????????????????,
由于我的表包含非英语(包含不同语言的字符)字符和列中的特殊字符.我只需要过滤非英文字符.它应该过滤任何特殊字符.

我尝试使用不同的方法进行过滤,但未能过滤几行.有人请帮帮我.提前致谢.

例如:
列名称LOCATION包含以下行:

第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产品.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读