【发布时间】:2016-09-25 21:30:39
【问题描述】:
所有,我正在尝试创建一个 T sql 标量函数,该函数删除传入的字符串值中的任何扩展 ascii 字符。我正在使用 PatIndex() 函数执行此操作,如下所示。我注意到的一件事是 T sql Char() 和 ascii() 函数在使用 asciitable.com 中提到的正确输入调用时返回不同的字符/十进制值。知道为什么这是不同的吗?数据库(Sql server 2012)上使用的排序规则是 SQL_Latin1_General_CP1_CI_AS
我使用这个 url 来复制和粘贴扩展的 ascii 字符 http://www.rapidtables.com/code/text/ascii-table.htm
SELECT
ASCII('Ñ') AS tsql_decimal_value,
165 AS value_from_ascii_table
SELECT
CHAR(165) AS tsql_value,
'Ñ' AS value_from_asciitable
我的 Tsql 函数
CREATE FUNCTION dbo.udf_Remove_NON_ASCII_characters (@value AS nvarchar(2000))
RETURNS varchar(2000)
AS
BEGIN
DECLARE @incorrectcharLoc smallint --Position of bad character
DECLARE @pattern varchar(140) --Bad characters to look for
SELECT
@pattern = '%[' + CHAR(128) + .... + CHAR(255) + ']%'
SELECT
@incorrectcharLoc = PATINDEX(@pattern, @value)
WHILE @incorrectcharLoc > 0
BEGIN
SELECT
@value = STUFF(@value, @IncorrectcharLoc, 1, '')
SELECT
@IncorrectcharLoc = PATINDEX(@Pattern, @value)
END
RETURN @value
END
【问题讨论】:
-
不在家,但请检查 NVARCHAR 值会发生什么。你确定标准的 ASCII 集实际上有这个值吗?您始终可以使用 ASCII() 来验证 SQL 识别的内容。注意:可以在此处找到标准集:ASCII Table
-
@clifton_h ,nvarchar 为 Ñ 扩展的 ascii 代码返回相同的 ascii() 代码。是的,这取自 asciitable.com(您提到的相同链接)