用空值替换NULL(SQL Server)

时间:2019-05-13 17:18:24

标签: sql sql-server

将NULL值替换为空白值

尝试使用CASE语句将NULL转换为空白值时。

注意:sampCol是数字ID

,CASE WHEN sampCol IS NULL THEN '' ELSE sampCol END as sampCol

我一直收到以下错误:

  

将数据类型varchar转换为数字时出错。

6 个答案:

答案 0 :(得分:5)

您正在混合数字和字符串值。

NULL不是空字符串。这是价值的缺失。

这类项目实际上应该降级到表示层,但是如果必须的话,请尝试以下秘籍。

...
, concat('',sampCol) as sampCol 
...

答案 1 :(得分:4)

这是因为case表达式可以根据数据类型优先级返回一个且仅返回数据类型。您不能将空字符串转换为数字数据类型。您尝试做的事情听起来似乎属于表示层,而不是数据层。让NULL发生!!

答案 2 :(得分:2)

添加到肖恩·梅的答案中。三个左括号和仅两个右括号将永远无法使用。 试试:

ISNULL(CAST(sampCol AS VARCHAR(100)),'')

也许使用AS添加字段名称,以便您可以在应用程序中使用它。

ISNULL(CAST(sampCol AS VARCHAR(100)),'') as samplColName

答案 3 :(得分:1)

COALESCE()CAST()结合使用将有助于:

SELECT COALESCE(CAST(SampCol AS VARCHAR (10)), '') AS SampCol
FROM TestTable

您可以根据业务需要更改所需的长度,而不是VARCHAR (10)

Demo on db<>fiddle

答案 4 :(得分:1)

用于将所有空值修复到数据库中的脚本

/ 由Brian Alvarez Ayala / 电子邮件-brian.alvarez@yahoo.com 网站-w w w。撒旦

声明@COLUMN_NAME varchar(40) 声明@DATA_TYPE varchar(40) 声明@TABLES_NAMES varchar(40) 声明@TABLE_SCHEMA varchar(40) 声明@IS_NULLABLE varchar(3)

声明@SqlCMD varchar(MAX) 声明表格光标 从INFORMATION_SCHEMA.TABLES中选择t.TABLE_SCHEMA,t.TABLE_NAME,c.COLUMN_NAME,c.DATA_TYPE,c.IS_NULLABLE t c.TABLE_NAME = t.TABLE_NAME和c.TABLE_SCHEMA = t.TABLE_SCHEMA上的内部联接INFORMATION_SCHEMA.COLUMNS c 打开表格 接下来从表格中获取@ TABLE_SCHEMA,@ TABLES_NAMES,@ COLUMN_NAME,@ DATA_TYPE,@ IS_NULLABLE 而@@ FETCH_STATUS = 0 开始
if(@DATA_TYPE ='数字'或@DATA_TYPE ='int')和@ IS_NULLABLE ='YES' 开始 set @SqlCMD ='更新'+ @TABLE_SCHEMA +'。'+ @ TABLES_NAMES +'set'+ @COLUMN_NAME +'= 0其中'+ @COLUMN_NAME +'为空' 打印@sqlcmd 结束

    if (@DATA_TYPE = 'nvarchar' or @DATA_TYPE = 'varchar' or @DATA_TYPE = 'char') and @IS_NULLABLE='YES'
    begin
        set @SqlCMD ='Update ' + @TABLE_SCHEMA+'.'+@TABLES_NAMES + ' set ' + @COLUMN_NAME + ' = ' + ''' ''' + ' where ' + @COLUMN_NAME + ' is null'
        print @sqlcmd
    end

    if (@DATA_TYPE = 'bit') and @IS_NULLABLE='YES'
    begin
        set @SqlCMD ='Update ' + @TABLE_SCHEMA+'.'+@TABLES_NAMES + ' set ' + @COLUMN_NAME + ' = ' + '''False''' + ' where ' + @COLUMN_NAME + ' is null'
        print @sqlcmd
    end

    fetch next from tablas into @TABLE_SCHEMA,@TABLES_NAMES,@COLUMN_NAME,@DATA_TYPE,@IS_NULLABLE
end 

关闭表格 取消分配标签

答案 5 :(得分:-1)

    ..CASE WHEN sampCol IS NULL THEN to_number('') ELSE sampCol END as sampCol