SQL Server 2008 - у меня есть таблица с 10 столбцами и множеством строк, из которых я хочу удалить с условием, например, удалить все строки, которые в конкретном столбце меньше 75 символов (около 10 слов).
Как удалить строки, содержащие менее 75 символов (около 10 слов) в определенном столбце
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
Он работает для обычного поля, но НЕ для поля типа данных ntext, пожалуйста, посоветуйте. Спасибо
- person user3731090; 24.09.2014
Рекомендуется отойти от
ntext
: См. Здесь: stackoverflow.com/questions/17738662/
- person logixologist; 24.09.2014
Невозможно изменить с ntext, без разрешений и не может изменить разрешения, любая идея?
- person user3731090; 24.09.2014
Думаю, эта ссылка вам поможет .... В конце концов, вам стоит подумать о замене
ntext
и text
на, возможно, varchar (max), но на данный момент есть решение: mssqltips.com/sqlservertip/1188/
- person logixologist; 25.09.2014
Я обновил ответ на случай, если у кого-то еще возникнет такая же проблема.
- 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
@logixologist - Да, вы абсолютно правы и просто сделали тоже ..... сожалею о своем способе ответа ...... так как я изучаю CTE всего несколько дней назад, я думаю об этом ....... ..
- person CIPHER; 24.09.2014
В программировании есть поговорка: есть несколько способов снять шкуру с кошки ... если вы добьетесь правильного результата, ответ будет правильным. Я еще не играл с CTE;)
- person logixologist; 24.09.2014
Для этого вы можете использовать следующий подход - пожалуйста, выполните указанные ниже действия.
- Создайте
temp table
такой же, как вашMAIN TABLE
ИInsert
все записи вtemp table
You can use INSERT INTO SELECT Statement
для достижения первого шага - При вставке вы будете упоминать имена и значения столбцов - используйте
CAST(varchar(75), [columnname])
, который обрежет данные, превышающие 75 символов. - Затем вы можете
truncate
основную таблицу иinsert
все записи изtemp table
в основную таблицу.
person
Murtaza
schedule
24.09.2014
Спасибо, так как я не программист, я был бы признателен, если бы вы могли написать весь код, чтобы я мог копировать и вставлять. Спасибо еще раз.
- person user3731090; 24.09.2014
Скопируйте и вставьте Lolllzlzzzz. Я дам вам номер своего банковского счета, пожалуйста, переведите сумму трудозатрат ..;)
- person Murtaza; 24.09.2014