2014-09-24 2 views
1

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

+0

Почему вы не могли бы сделать простой DELETE FROM имя_таблицы, где LEN (columname) <75 – logixologist

ответ

2

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

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

DELETE FROM yourTableName where len(aParticularColumn) < 75 

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

DELETE FROM yourTableName where DATALENGTH(aParticularColumn) < 75 

Microsoft Documentation to the DATALENGTH function

+0

Его работа для регулярного поля, но НЕ для поля типа данных «ntext», пожалуйста, сообщите. Спасибо – user3731090

+0

Рекомендуем вам перейти от 'ntext': См. Здесь: http: // stackoverflow.com/questions/17738662/what-is-difference-between-ntext-and-varchar-in-sql-server-2008-r2 – logixologist

+0

Невозможно изменить из «ntext», нет разрешений и не может изменять разрешения, любую идею? – user3731090

0

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

  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 до основного стола.
+1

Спасибо, так как я с не программист, я был бы признателен, если вам мог написать весь код, чтобы я мог копировать и вставлять. Еще раз спасибо. – user3731090

+1

Копия и вставка Lolllzlzzzz Я дам вам свой номер банковского счета, пожалуйста, переведите сумму часов работы ..;) – Murtaza

2

Как @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 заменить имя таблицы, в которой ваши данные проживает
+0

@logixologist - Я абсолютно прав и просто сделан слишком ..... пожалею, что я отвечаю ... ... с тех пор, как я изучаю CTE всего за несколько дней назад, мой разум думает об этом ......... – CIPHER

+0

есть высказывание в программировании: существует множество способов кожи кошки .... если вы достигаете правильного результата, так как ответ правильный. Мне еще нужно играть с CTE;) – logixologist

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