MySQL - 从表中删除空值行

12

我有一张名为"user"的表格,其中有超过60列。 其中一列的名称是"username"

我希望删除用户名字段为空或NULL的行。

我该怎么做?

谢谢!

3个回答

22

试试这个

DELETE FROM user WHERE username IS NULL;
或者
DELETE FROM user WHERE username = '';

NULL值的问题


7
如果你想删除那些包含 username = NULL 且 username 是空字符串("")的所有行,则可以执行以下操作:
DELETE FROM table_name WHERE username IS NULL OR username = '';

建议首先使用与您将在DELETE查询中使用的相同WHERE条件的SELECT查询来查看将被删除的行:

SELECT * FROM table_name WHERE username IS  NULL OR username = "";

0

在这里,我创建了一个适用于任何类型的SQL表的脚本。请复制此存储过程并在您的环境中创建它,然后使用您的表运行此存储过程。

exec [dbo].[SP_RemoveNullValues] 'Your_Table_Name'

存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--akila liyanaarachchi
Create procedure [dbo].[SP_RemoveNullValues](@PTableName Varchar(50) ) as 
begin


DECLARE Cussor CURSOR FOR 
SELECT COLUMN_NAME,TABLE_NAME,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @PTableName  

OPEN Cussor;

Declare @ColumnName Varchar(50)
Declare @TableName  Varchar(50)
Declare @DataType Varchar(50)
Declare @Flage  int 

FETCH NEXT FROM Cussor INTO @ColumnName,@TableName,@DataType
WHILE @@FETCH_STATUS = 0
BEGIN

set @Flage=0


If(@DataType in('bigint','numeric','bit','smallint','decimal','smallmoney','int','tinyint','money','float','real'))
begin
set @Flage=1
end 
If(@DataType in('date','atetimeoffset','datetime2','smalldatetime','datetime','time'))
begin
set @Flage=2
end 
If(@DataType in('char','varchar','text','nchar','nvarchar','ntext'))
begin
set @Flage=3
end 

If(@DataType in('binary','varbinary'))
begin
set @Flage=4
end 



DECLARE @SQL VARCHAR(MAX) 

if  (@Flage in(1,4))
begin 

SET @SQL ='  update ['+@TableName+'] set ['+@ColumnName+']=0 where ['+@ColumnName+'] is null'
end 

if  (@Flage =3)
begin 

SET @SQL ='  update ['+@TableName+'] set ['+@ColumnName+'] = '''' where ['+@ColumnName+'] is null '
end 

if  (@Flage =2)
begin 

SET @SQL ='  update ['+@TableName+'] set ['+@ColumnName+'] ='+'''1901-01-01 00:00:00.000'''+' where ['+@ColumnName+'] is null '
end 


EXEC(@SQL)



FETCH NEXT FROM Cussor INTO @ColumnName,@TableName,@DataType
END

CLOSE Cussor
DEALLOCATE Cussor

END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接