【发布时间】:2019-05-13 17:18:23
【问题描述】:
用空白值替换NULL值
在尝试使用 CASE 语句将 NULL 转换为空白值时。
注意:sampCol 是数字 ID
,CASE WHEN sampCol IS NULL THEN '' ELSE sampCol END as sampCol
我不断收到以下错误:
将数据类型 varchar 转换为数值时出错。
【问题讨论】:
标签: sql sql-server
用空白值替换NULL值
在尝试使用 CASE 语句将 NULL 转换为空白值时。
注意:sampCol 是数字 ID
,CASE WHEN sampCol IS NULL THEN '' ELSE sampCol END as sampCol
我不断收到以下错误:
将数据类型 varchar 转换为数值时出错。
【问题讨论】:
标签: sql sql-server
您正在混合数字和字符串值。
NULL 不是空字符串。就是没有价值。
像这样的项目确实应该降级到表示层,但如果必须,请尝试以下作弊。
...
, concat('',sampCol) as sampCol
...
【讨论】:
添加到肖恩梅的答案。三个左括号和只有 2 个右括号永远不会起作用。 试试:
ISNULL(CAST(sampCol AS VARCHAR(100)),'')
也许使用AS 添加字段名称,以便您可以在您的应用程序中使用它。
ISNULL(CAST(sampCol AS VARCHAR(100)),'') as samplColName
【讨论】:
这是因为 case 表达式可以根据数据类型优先级返回一个且唯一的数据类型。您不能将空字符串转换为数字数据类型。您尝试做的事情听起来像是属于表示层,而不是数据层。让NULL发生!!!
【讨论】:
将COALESCE() 与CAST() 结合使用会有所帮助:
SELECT COALESCE(CAST(SampCol AS VARCHAR (10)), '') AS SampCol
FROM TestTable
这里不是VARCHAR (10),您可以根据您的业务需要更改所需的长度。
【讨论】:
将所有空值修复到数据库中的脚本
/布莱恩·阿尔瓦雷斯·阿亚拉/ 电子邮件 - brian.alvarez@yahoo.com 网站 - w w w 。 a s e s o r i a r e m o t a 。哥们
声明@COLUMN_NAME varchar(40) 声明@DATA_TYPE varchar(40) 声明@TABLES_NAMES varchar(40) 声明@TABLE_SCHEMA varchar(40) 声明@IS_NULLABLE varchar(3)
声明@SqlCMD varchar(MAX)
声明 tablas 光标
从 INFORMATION_SCHEMA.TABLES 中选择 t.TABLE_SCHEMA ,t.TABLE_NAME,c.COLUMN_NAME,c.DATA_TYPE,c.IS_NULLABLE t
内部连接 INFORMATION_SCHEMA.COLUMNS c 在 c.TABLE_NAME = t.TABLE_NAME 和 c.TABLE_SCHEMA = t.TABLE_SCHEMA
打开表
从 tablas 获取下一个到 @TABLE_SCHEMA,@TABLES_NAMES,@COLUMN_NAME,@DATA_TYPE,@IS_NULLABLE
而@@FETCH_STATUS =0
开始
if (@DATA_TYPE = 'numeric' 或 @DATA_TYPE = 'int') 和 @IS_NULLABLE='YES'
开始
set @SqlCMD ='Update ' + @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
关闭表格 解除分配表
【讨论】:
..CASE WHEN sampCol IS NULL THEN to_number('') ELSE sampCol END as sampCol
【讨论】:
CASE。对于 T-SQL,请使用 ISNULL(CAST(sampCol AS VARCHAR(100),'') 或通用 SQL COALESCE(CAST(sampCol AS VARCHAR(100),'')。