Я не уверен, что можно сделать то, что я пытаюсь сделать, но я думал, что все равно сделаю это. Кроме того, я довольно новичок в мире SQL Server, и это мой первый пост, поэтому я приношу свои извинения, если моя формулировка плохая или я оставляю информацию. Кроме того, я работаю с SQL Server 2005.Обновление SQL Server 2005/Удалить подстроку длинной колонны
Предположим, у меня есть таблица с именем «table» и столбец с именем «column». Содержимое столбца - это беспорядочный беспорядок символов (ntext
). Эти символы были нарисованы из нескольких полей ввода в приложении переднего конца. Теперь одно из этих полей ввода предназначено для конфиденциальной информации, которую мы больше не нуждаемся и хотели бы избавиться, но я не могу просто избавиться от всего столбца, потому что он также содержит другую ценную информацию. Большинство решений, которые я нашел до сих пор, касаются только столбцов с короткими записями, поэтому они просто могут обновить всю строку, но по моему, мне кажется, мне нужно определить начало и конец конкретной подстроки, которая мне нужна и заменить его или удалить его как-то. Это самое близкое, что я получил, по крайней мере, для выбора необходимых мне данных ... AAA и/AAA отмечают начало и конец нужной мне подстроки.
select
substring (column, charindex ('AAA', column), charindex ('/AAA',column))
from table
where column like '%/AAA%'
Проблемы, которые я имею с этим в том, что подстрока не останавливается на/AAA, он просто продолжает идти, и некоторые результаты являются просто пустой, так что это выглядит примерно так:
- AAA 12345/AAA ABCDEFGHIJKLMNOP
- AAA 12346/AAA qrstuvwxyzabcdef
AAA 12347/AAA ABCDEFGHIJKLMNOP
С характерами жирным шрифтом, является информация, которую я должен избавиться. Также, хотя строка 3 пуста, она по-прежнему содержит информацию, которая мне нужна, но я предполагаю, что она не возвращает ее, потому что перед ней есть различное количество символов (например, строки 1, 2 и 4 может иметь до 50 символов перед ними, но в строке 3 может быть до 100 символов), по крайней мере, это единственная причина, о которой я мог думать.
Итак, я предполагаю, что первым шагом, вероятно, было бы выбрать правильную подстроку, затем либо удалить ее, либо заменить ее другой, бессмысленной подстрокой вроде «111111» или что-то в этом роде.
Если у вас есть дополнительная информация, которую вам нужно предоставить, или если я не знаю ничего, сообщите мне и спасибо, что нашли время, чтобы прочитать (и, надеюсь, ответ) мой вопрос!
Edit: Еще один, который приближается к правильным результатам выходит что-то вроде этого
select substring(column,charindex('AAA',column),20) from table
where column like '%/AAA%'
Я не уверен, если этот подход будет работать лучше, так как подстрока я ищу всегда будет иметь одинаковое количество символов. Проблема с этим заключается в том, что вместо наличия пустых строк они заменяются несущественными подстроками из этого столбца, но все остальные строки возвращают именно то, что я хочу.
Спасибо за быстрый ответ @TheTTGGuy! Я уже пробовал что-то подобное, и я всегда получаю ошибку «Недопустимый параметр длины, переданный функции SUBSTRING». Я не мог понять, почему он возвращал отрицательное значение (по крайней мере, это мое понимание этой ошибки) – Weston
Ну, если вы вычитаете результаты charindex, убедитесь, что первый из них действительно существует. Вы можете добавить к своему предложению where: AND столбец, например «% AAA%», чтобы получить строки, на которых также есть стартовая строка. –