Как удалить строки, содержащие менее 75 символов (около 10 слов) в определенном столбце

SQL Server 2008 - у меня есть таблица с 10 столбцами и множеством строк, из которых я хочу удалить с условием, например, удалить все строки, которые в конкретном столбце меньше 75 символов (около 10 слов).


person user3731090    schedule 24.09.2014    source источник
comment
Почему вы не могли сделать простое УДАЛЕНИЕ ИЗ имя таблицы, где len (имя столбца) ‹75   -  person logixologist    schedule 24.09.2014


Ответы (3)


Самое простое решение - использовать функцию SQL с именем len, которая используется следующим образом: len(nameOffield)

В вашем случае просто добавьте вам функцию where в команде удаления следующим образом:

DELETE FROM yourTableName where len(aParticularColumn) < 75

Обновите, чтобы ответить: если ваш aParticularColumn имеет тип данных text или ntext, вы можете использовать DATALENGTH вместо len. В этом случае это было бы

DELETE FROM yourTableName where DATALENGTH(aParticularColumn) < 75

Документация Microsoft к функции DATALENGTH

person logixologist    schedule 24.09.2014
comment
Он работает для обычного поля, но НЕ для поля типа данных ntext, пожалуйста, посоветуйте. Спасибо - person user3731090; 24.09.2014
comment
Рекомендуется отойти от ntext: См. Здесь: stackoverflow.com/questions/17738662/ - person logixologist; 24.09.2014
comment
Невозможно изменить с ntext, без разрешений и не может изменить разрешения, любая идея? - person user3731090; 24.09.2014
comment
Думаю, эта ссылка вам поможет .... В конце концов, вам стоит подумать о замене ntext и text на, возможно, varchar (max), но на данный момент есть решение: mssqltips.com/sqlservertip/1188/ - person logixologist; 25.09.2014
comment
Я обновил ответ на случай, если у кого-то еще возникнет такая же проблема. - person logixologist; 25.09.2014

Как сказал @ogixologist ...

DELETE  FROM  table_name  where  len (column_name) < 75

И вот я с помощью CTE проверил !!!!!!!!!

;with cte 
as
(       
    SELECT  column_name, temp = LEN ( CAST ( column_name As nvarchar(4000) ) ) from table_name
)
delete from cte where temp<=75;
  • Вы можете преобразовать в nvarchar, прежде чем найти длину, или просто используйте Len(column_name)
  • вместо column_name замените ваше имя столбца nvarchar, как хотите
  • вместо table_name замените имя вашей таблицы, в которой находятся ваши данные
person CIPHER    schedule 24.09.2014
comment
@logixologist - Да, вы абсолютно правы и просто сделали тоже ..... сожалею о своем способе ответа ...... так как я изучаю CTE всего несколько дней назад, я думаю об этом ....... .. - person CIPHER; 24.09.2014
comment
В программировании есть поговорка: есть несколько способов снять шкуру с кошки ... если вы добьетесь правильного результата, ответ будет правильным. Я еще не играл с CTE;) - person logixologist; 24.09.2014

Для этого вы можете использовать следующий подход - пожалуйста, выполните указанные ниже действия.

  1. Создайте temp table такой же, как ваш MAIN TABLE И Insert все записи в temp table You can use INSERT INTO SELECT Statement для достижения первого шага
  2. При вставке вы будете упоминать имена и значения столбцов - используйте CAST(varchar(75), [columnname]), который обрежет данные, превышающие 75 символов.
  3. Затем вы можете truncate основную таблицу и insert все записи из temp table в основную таблицу.
person Murtaza    schedule 24.09.2014
comment
Спасибо, так как я не программист, я был бы признателен, если бы вы могли написать весь код, чтобы я мог копировать и вставлять. Спасибо еще раз. - person user3731090; 24.09.2014
comment
Скопируйте и вставьте Lolllzlzzzz. Я дам вам номер своего банковского счета, пожалуйста, переведите сумму трудозатрат ..;) - person Murtaza; 24.09.2014