Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10

Быстрое удаление символов по заданному списку

05.07.2024, 11:57. Показов 494. Ответов 4

Студворк — интернет-сервис помощи студентам
Приветствую!

В огромной таблице (50 млн строк по ~ 300 символов) нужно произвести удаление всех символов, не входящих в список «разрешённых» (WhiteList). Пример простого WhiteList: ‘0-9A-Za-z ,.+-*/:-’

Сейчас формирую строку BlackList (из всех символов Юникода (65 535), за исключением WhiteList), использую её в Translate (заменяя их на NChar(0)) и затем вычищаю Char(0) с помощью Replace().

Полагаю, что, т.к. WhiteList в сотни раз короче BlackList, должен быть способ не УДАЛЯТЬ ненужные, а ОСТАВЛЯТЬ нужные. Или же, просто другой, более быстрый, подход.

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

Важно! Присутствует таблица с индексами, которая может очень помочь.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Create Table dbo.sku_Sym   -- With Collate Cyrillic_General_Bin for Column «NChar»
 
(
 
       UniCode             Int                 Primary Key                                    Not Null,
 
       NChar         NChar(1)     Collate Cyrillic_General_Bin      Not Null,
 
       Filter        Bit                                                                       Not Null   -- Col for Filter In Where. Have Indexes for Filter = 1.
 
)
 
---------------------------------------------------------------------------------------------------
 
Create Unique Index UC On dbo.sku_Sym(UniCode, NChar);
 
Create Unique Index UCF On dbo.sku_Sym(UniCode, NChar) Where Filter = 1;
 
Create Unique Index CU On dbo.sku_Sym(NChar, UniCode);
 
Create Unique Index CUF On dbo.sku_Sym(NChar, UniCode) Where Filter = 1;
Например, можно, перед вызовом функции (перед обработкой огромной таблицы) заполнить поле Filter = 1 в соответствующих строках/символах White/BlackList.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2024, 11:57
Ответы с готовыми решениями:

Удаление файлов-картинок из папки по заданному списку
Здравствуйте! Есть список ненужных картинок в txt файле, есть папка, в которой более 10000 картинок. Необходим батник, который поможет...

Переименование файлов по заданному списку
Искал решение своей проблемы в гугле и т.д. Но там и проги и советы по типу: "Выбери все файлы, задай форму и получи: file1 file2 ...

Принадлежит ли число заданному списку
Есть число, которое будет изменяться в цикле. Есть список элементов. Нужно вычислить, принадлежит ли число списку? Пример: int i=0; ...

4
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
05.07.2024, 13:36
если это не разовая блажь может стоит подумать над clr-функцией удаляющей "плохие" символы из строки
0
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
05.07.2024, 13:51  [ТС]
Аватар, пока, к сожалению, нет возможности...
В будущем будет реализовано на регулярках в C#
0
1304 / 358 / 97
Регистрация: 14.10.2022
Сообщений: 1,089
06.07.2024, 11:00
Лучший ответ Сообщение было отмечено Jack Famous как решение

Решение

Эээ...
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Use tempdb
Go
 
Drop table if exists #t
Create table #t (txt nvarchar(255))
 
Insert into #t values (N'aaaAb'), (N'bBbBA'), (N'CcccC')
 
Drop table if exists #d
Create table #d (n int, dsbl nchar(1) collate Cyrillic_General_bin2)
 
Insert into #d values (1, N'A'), (2, N'b'), (3, N'C')
 
;With s as 
(Select Replace(a.txt collate Cyrillic_General_BIN2, b.dsbl collate Cyrillic_General_BIN2, '') txt, 1 n  
from #t a inner join #d b on b.n = 1
Union all
Select Replace(a.txt collate Cyrillic_General_BIN2, b.dsbl collate Cyrillic_General_BIN2, '')  txt, b.n n
    from s a inner join  #d b on b.n = a.n + 1
Where b.n <=3
)
Select txt from s 
Where n = 3
1
932 / 365 / 43
Регистрация: 10.05.2021
Сообщений: 1,564
Записей в блоге: 10
08.07.2024, 11:26  [ТС]
uaggster, буду разбирать) спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2024, 11:26
Помогаю со студенческими работами здесь

Сортировка Datagridview по заданному списку
Здравствуйте. Есть datagridview со столбцами: ФИО, пол, возраст,должность. Как сделать что бы данные в гриде сортировались по столбцу...

Проверка времени по заданному списку (ObservableCollection)
Здравствуйте, делаю небольшой программку, которая просто сравнивает текущее время с временем заданным в ObservableCollection, и если оно...

Проверка логина, пароля по заданному списку
Прошу можно сказать написать код я начинающий. Хочу сделать код такой: имеется кнопка и два текст бокса это логин и пароль. Я впишу в код...

Clojure Найти медиану по заданному списку чисел
Find the Median by HackerRank https://www.hackerrank.com Given a list of numbers, can you find the median? ...

Быстрое удаление #Н/Д
Всем привет! В процессе работы с кучей файлов с использованием ВПР перебором (больше 400 файлов), столкнулся с необходимостью чистить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru