如何选择在sql server 2005中包含非英文字符的行(它应该只筛选非英文字符,而不是特殊字符)
由于我的表包含非英文(包含不同语言的字符)字符和特殊字符一列。我只需要过滤非英文字符。它应该过滤任何特殊字符。如何选择在sql server 2005中包含非英文字符的行(它应该只筛选非英文字符,而不是特殊字符)
我尝试使用不同的方法来过滤,但未能过滤几行。有人请帮助我。提前致谢。
例如: 列名位置包含以下行:
行1:துயஇம்மானுவேல்தேவாலயம்,北大街,Idyanvillai,印度泰米尔纳德邦
行2:Dr.Hakim M.Asgar Ali的ROY医疗中心™Unani诊所位于印度喀拉拉邦,Thycaud医院路,Opp。 。Amritha酒店,, Thycaud.P.O ,,特里凡得琅,喀拉拉邦,印度
排3:ಕಾಳಿಕಾಂಬದೇವಿದೇವಸ್ಥಾನ,希瓦吉格尔,达文盖雷,印度卡纳塔克邦
正如上面包含许多语言字符。任何一个只能帮我选择第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功能。 (这包括微软的SQL Azure产品。)
回答:
为我的问题得到了一个很好的答案。
select ID, LATITUDE, LONGITUDE, REFERENCE, LOCATION, VALIDATE, patindex('%[^ !-~()"]%' COLLATE Latin1_General_BIN,LOCATION) as [Position],
substring(LOCATION,patindex('%[^ !-~()"]%' COLLATE Latin1_General_BIN,LOCATION),1) as [InvalidCharacter],
ascii(substring(LOCATION,patindex('%[^ !-~()"]%' COLLATE Latin1_General_BIN,LOCATION),1)) as [ASCIICode]from dbo.RADAR_SEARCH where patindex('%[^ !-~()"]%' COLLATE Latin1_General_BIN,LOCATION) >0
EDIT1: 解释上面的回答
上面的查询过滤器,其中不包含特殊字符位置列只非英文字符。
注意:仅在MS-SQL中进行测试。
回答:
如果你有所有允许的特殊字符,下面的select语句应该选择只有英语和允许的特殊字符中的所有列:
select column_name from table_name where column_name like '%[^a-z, .-™]%';
您可以添加方括号内所有允许的特殊字符。
以上是 如何选择在sql server 2005中包含非英文字符的行(它应该只筛选非英文字符,而不是特殊字符) 的全部内容, 来源链接: utcz.com/qa/265729.html