将NULL值替换为空白值
尝试使用CASE语句将NULL转换为空白值时。
注意:sampCol
是数字ID
,CASE WHEN sampCol IS NULL THEN '' ELSE sampCol END as sampCol
我一直收到以下错误:
将数据类型varchar转换为数字时出错。
答案 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)
。
答案 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