【问题标题】:Pass null values to zero将空值传递为零
【发布时间】:2021-02-23 07:09:20
【问题描述】:

我正在制作一个从 csv 文件中吸收值的表格。我有几个数字列,在将文本转换为数字时,插入值时出现错误。

我在 csv 中有 NULL 值。有没有办法从数据库中删除它们。我手动删除它们。
NULL -> '0'。

我尝试了默认。 ISNULL,不知道建表的时候能不能用。 我想尝试的是不再打开 csv。这样我就明白了。并且在导入数据库时​​,NULL 会归零。

我收到 csv 格式的文件。我打开它们,删除 NULL 值。

   7939102772 2401679 108271 0 3000062862 174529 8129 
   7939102772 2401679 108271 0 3000062862 174529 8129 
   7939102772 2401679 108271 0 3000062862 174529 8129 
1. NULL NULL NULL NULL NULL NULL NULL 

我使用:

BULK INSERT [dbo] 
FROM 'C:csv' 
WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR='\n');

【问题讨论】:

  • 请不要将图像用于数据、代码或错误 - 使用格式化/表格文本。你是如何导入你的价值观的?
  • 我们需要更多关于如何导入 CSV 的信息。但我的第一个猜测是你可以尝试使用CASE .. WHEN
  • NULL 值在 csv 文件中的样子如何?
  • TEXT,没有图片...但是现在不知道这是否符合您的情况,所以请使用edit在您的问题中复制/粘贴您的数据。
  • 当插入值时,我得到一个错误发布完整的和实际的错误信息,所有的。

标签: sql sql-server tsql


【解决方案1】:

您可以在导入时允许空值,以消除空值插入导致的错误。如果您使用脚本或 sql 查询导入 csv,您可以将查询更新为

INSERT INTO table(Col1,Col2,Col3.....) VALUES(ISNULL(value1,0),ISNULL(value2,0),ISNULL(value3,0))

或者您可以在成功导入 csv 后使用以下脚本更新您的表格

update  Tableset  Col1=IIf([Col1] Is Null, "0", [Col1]), 

[Col2]=IIf([Col2] Is Null, "0", [Col2]), 

[Col3] =IIf([Col3] Is Null, "0", [Col3]) 

where [Col1] is null or [Col2] is null or [Col3] is null

最好的方法是在导入数据库之前使用 python、jupyter 或任何您熟悉的语言处理和清理您的数据。

【讨论】:

  • 这可以工作,但它不是通用的。我想知道你是否可以使用一个表函数,它可以使用系统表来识别所有列名,然后返回一个所有列都为空的表
  • 这是从 csv 导入时的常见做法。有很多空值和不一致的数据。据我所知,没有这样的功能,但如果有的话会很有帮助。这就是为什么在插入数据库之前清理数据更好
  • 需要为数据集构建一个类似 fillna(0) 的函数。一种方法是在 pandas 中加载 csv,然后填充缺失的数据,然后使用 python sqlalchemy 上传数据
  • 这正是我的建议。要在插入之前使用 pandas、python 清理数据
  • 当然,大家都喜欢熊猫。微软应该在未来提供等效的 etl 功能
【解决方案2】:

SQL Server Import Wizard treats NULL as literal string 'NULL'

另一个想法是将导入的数据放入临时表中,然后应用并更新导入产生的字符串“NULL”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2018-05-15
    相关资源
    最近更新 更多