2015-06-23 2 views
0

Я не уверен, что можно сделать то, что я пытаюсь сделать, но я думал, что все равно сделаю это. Кроме того, я довольно новичок в мире 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, он просто продолжает идти, и некоторые результаты являются просто пустой, так что это выглядит примерно так:

  1. AAA 12345/AAA ABCDEFGHIJKLMNOP
  2. AAA 12346/AAA qrstuvwxyzabcdef
  3. 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%' 

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

ответ

0

Прежде всего, проверьте свое использование SUBSTRING().Третий аргумент длины, не символ конца, так что вам нужно будет изменить ваш запрос на что-то вроде:

select substring (column, charindex ('AAA',column) 
, charindex ('/AAA',column)-charindex ('AAA',column)) 
from table where column like '%/AAA%' 

Да ваш подход найти его, а затем либо удалить или заменить его звук.

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

+0

Спасибо за быстрый ответ @TheTTGGuy! Я уже пробовал что-то подобное, и я всегда получаю ошибку «Недопустимый параметр длины, переданный функции SUBSTRING». Я не мог понять, почему он возвращал отрицательное значение (по крайней мере, это мое понимание этой ошибки) – Weston

+0

Ну, если вы вычитаете результаты charindex, убедитесь, что первый из них действительно существует. Вы можете добавить к своему предложению where: AND столбец, например «% AAA%», чтобы получить строки, на которых также есть стартовая строка. –

Смежные вопросы