asyadav Ответов: 1

Как удалить unicode / symbol/недопустимые символы, существующие в first_name


Я попытался создать функцию для обработки unicode / нежелательного / недопустимого символа в таблице,но у меня возникли некоторые проблемы,потому что в моей таблице есть также другие языки/символ/недопустимые выходы и данные,такие как китайский, испанский, русский, символ также выходит и т. д.

Когда я использую эту функцию, то другие языки/символы преобразуются в ????

пожалуйста, помогите мне здесь в этом вопросе.

В основном мне это нужно, чтобы очистить имя и фамилию, прежде чем делиться данными с клиентами.


Результат по имени
♥๘ إ ζـسآآس ?????????
ندا ???
محمد حسن ???????
ЖАН-ЛЮК ЖАН-ЛЮК
Я есть
Мм-алмонеф мм-алмонеф
برآءه ?????
الحر ????
غلا ???
وديان ?????

Что я уже пробовал:

CREATE FUNCTION dbo.UDF_Removecharacter
(
@string VARCHAR(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @IncorrectCharLoc SMALLINT
SET @IncorrectCharLoc = PATINDEX('%[^0-9A-Za-z一个-同-]%', @string)
WHILE @IncorrectCharLoc > 0
BEGIN
SET @string = STUFF(@string, @IncorrectCharLoc, 1, '')
SET @IncorrectCharLoc = PATINDEX('%[^0-9A-Za-z个-同-]%', @string)
END
SET @string = @string
RETURN @string
END

0x01AA

Непонятно, по крайней мере для меня. Имена файлов и Unicode / символы не связаны напрямую. С моей точки зрения, существует только набор символов, которые не допускаются в имени файла. Вы можете посмотреть здесь:
Именование файлов, путей и пространств имен (Windows)[^]

asyadav

Привет, спасибо за комментарии.
На самом деле я не разработчик. я работаю аналитиком данных, поэтому, насколько я понимаю,я создал это.

Мой вопрос здесь в том, что мне нужно удалить некоторые символы, которые существуют в столбце first_name таблицы.

1 Ответов

Рейтинг:
1

Kornfeld Eliyahu Peter

Похоже, вы на самом деле не используете Unicode в SQL... [^]
Используйте NVARCHAR вместо VARCHAR и префикс строковых констант с N"...


asyadav

Я изменил код, как вы предложили, но все равно получаю ошибку, не могли бы вы помочь мне здесь на самом деле я не разработчик, я работаю аналитиком данных, поэтому всегда делаю это вручную в файле excel, это занимает слишком много времени, потому что количество данных велико.


Изменить функцию dbo.UDF_Removecharacter
(
@string NVARCHAR(1000)
)
ВОЗВРАЩАЕТ NVARCHAR(1000)
АС
НАЧАТЬ
Объявить @IncorrectCharLoc SMALLINT
Набор @IncorrectCharLoc = функция patindex(Н'%[^0-9А-Яа-я]%', @строка)
В то время как @IncorrectCharLoc > 0
НАЧАТЬ
SET @string = STUFF(@string, @IncorrectCharLoc, 1,' ')
Набор @IncorrectCharLoc = функция patindex(Н'%[^0-9А-Яа-я]%', @строка)
КОНЕЦ
Установить строку @ = @строка
возвращенная строка
КОНЕЦ

Получаю ошибку
Msg 0, Уровень 11, Состояние 0, Строка 31
В текущей команде произошла серьезная ошибка. Результаты, если таковые имеются, следует отбросить.

Kornfeld Eliyahu Peter

Ошибка здесь не имеет ничего общего с юникодом или чем-то подобным... Вам нужно изолировать строку (так как в вашей функции нет строки 31), на которой она терпит неудачу... Однако часто такая ошибка связана с проблемой целостности данных, например с поврежденными индексами...

asyadav

7 не хватает данных в таблице, где я использую ниже оператор select :

выберите [Инд имя],ДБО.UDF_Removecharacter([Инд имя]) from Имя_таблицы

asyadav

Ниже упоминается тип нежелательной хартии, существующий в значении столбца, который мне нужно удалить


███▓▒░░▀▄▀▄▀▄ОО ★TENZO★ ОО▀▄▀▄▀░░▒▓███

§©ö®pïöñ

M MØÜÐÝ☺

ْ * ●ùùsêf

♥ṠảЯờήāђ

......

----