sql-server - 如何在sql server 2005中选择包含非英语字符的行(它应该只过滤非英语字符,而不是特殊字符)

标签 sql-server

因为我的表在列中包含非英语(包含不同语言的字符)字符和特殊字符。我只需要过滤非英文字符。它应该过滤任何特殊字符。

我尝试使用不同的方法来过滤,但未能过滤几行。有人请帮我解决这个问题。提前致谢。

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

第 1 行:துய இம்மானுவேல் தேவாலயம்,北街,Idyanvillai,泰米尔纳德邦,印度

第 2 行:Hakim M.Asgar Ali 博士的 ROY MEDICAL CENTRE™ Unani 诊所位于印度喀拉拉邦,Thycaud Hospital Road,Opp。 Amritha Hotel,, Thycaud.P.O.,, 蒂鲁文南特布勒姆, 喀拉拉邦, 印度

第 3 行:ಕಾಳಿಕಾಂಬ ದೇವಿ ದೇವಸ್ಥಾನ,Shivaji Nagar,达万盖雷,卡纳塔克邦,印度

由于上面包含了多种语言的字符。谁能帮我只选择第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 。然后您可以将正则表达式或其他内容应用于列。由于它们破坏了可移植性并带来安全风险,因此许多系统管理员不允许使用 CLR 函数。 (这包括 Microsoft 的 SQL Azure 产品。)

关于sql-server - 如何在sql server 2005中选择包含非英语字符的行(它应该只过滤非英语字符,而不是特殊字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139258/

相关文章:

SQL Server 2008 : TOP 10 and distinct together

sql-server - SQL UDF 返回日期数组

sql-server - 为什么方括号与表名一起出现?

c# - sql server 中百分比列的数据类型是什么?

sql - 数据本身是否有 SQL 编辑器?

sql-server - 将表达式转换为数据类型日期时间时出现算术溢出错误。 (同时显示日期时间..)

SQL Server 在 where 条件下替代 OR

sql-server - 如何在SSIS中调用存储过程?

SQL 查询进出考勤

java 没有捕获 ms sql 存储过程引发错误