【发布时间】:2014-09-24 09:55:02
【问题描述】:
SQL Server 2008 - 我有一个包含 10 列和许多行的表,我想删除其中的所有行,例如删除所有行,特别是那些小于 75 个字符(约 10 个字)的特定列
【问题讨论】:
-
你为什么不能做一个简单的 DELETE FROM tablename where len(columname)
标签: sql database sql-server-2008 sql-delete
SQL Server 2008 - 我有一个包含 10 列和许多行的表,我想删除其中的所有行,例如删除所有行,特别是那些小于 75 个字符(约 10 个字)的特定列
【问题讨论】:
标签: sql database sql-server-2008 sql-delete
最简单的解决方案是使用名为len 的SQL 函数,其用法如下:len(nameOffield)
在您的情况下,只需在删除命令中的 where 子句中添加函数,如下所示:
DELETE FROM yourTableName where len(aParticularColumn) < 75
更新回答:如果您的 aParticularColumn 的数据类型为 text 或 ntext,您可以使用 DATALENGTH 而不是 len。在这种情况下,它将是
DELETE FROM yourTableName where DATALENGTH(aParticularColumn) < 75
【讨论】:
ntext:见此处:stackoverflow.com/questions/17738662/…
ntext 和 text 更改为 varchar(max) 但现在有一个解决方案:mssqltips.com/sqlservertip/1188/…
正如@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;
Len(column_name)
【讨论】:
要实现这一点,您可以使用以下方法 - 请按照上述步骤操作
MAIN TABLE 和Insert 相同的temp tabletemp table 中的所有记录
You can use INSERT INTO SELECT Statement实现第一步CAST(varchar(75), [columnname]),它将截断超过 75 个字符的数据。 truncate你的主表和insert从temp table到主表的所有记录。 【讨论】: