Все, я пытаюсь создать скалярную функцию 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
См. прикрепленный снимок экрана для наборов результатов сервера sql Будем очень признательны за любую помощь