【问题标题】:While importing from csv file, which format of DateTime is acceptable in SQL Server?从 csv 文件导入时,SQL Server 可以接受哪种格式的 DateTime?
【发布时间】:2017-10-28 08:01:10
【问题描述】:

我需要通过逗号分隔值导入 SQL 服务器中的数据。

这是一个示例行

37;3.90;13;3.25;14;1.70;0;1;0-1;2;3;1;3-1;1;29/1/2000 5:00:00 μμ;

如果我没记错的话,最后一个字段29/1/2000 5:00:00 μμ 是不可接受的,因为它包含文化数据。

具体字段是这样创建的

  row += $"{v.KickOff.ToString()};";

其中KickOffDateTime 数据类型。

可以吗,否则我稍后会在导入时遇到问题?

【问题讨论】:

  • 如何导入该 CSV 文件?您使用 BulkCopy 还是某种 CSV 解析器?
  • 永远不要将mm/dd/yyyy用作数据交换目的的日期表示(事实上,永远不要将mm/dd/yyyy用于任何事情,因为它很愚蠢——但那是另一回事)。使用yyyy-mm-dd
  • @Steve 我会用sql management studio的导入流程
  • 此外,切勿通过字符串连接构建 CSV。除了最基本的情况外,CSV 太复杂了。我想知道,如果您编写 C# 为什么不直接将数据写入数据库?首先将其转换为 CSV 是退一步。
  • 我的第二条评论?有什么可以“检查”的?为什么在生产中使用不同的方法导入数据?如果是这样,那么现在用 CSV 做这件事有什么意义呢?当您在 C# 中并且可以直接写入数据库时​​,使用 CSV at all 这样做有什么意义?我不明白整个问题。

标签: c# sql-server csv datetime


【解决方案1】:

好的,到此结束

row += $"{v.KickOff.ToString("yyyy-MM-dd HH:mm:ss")};";

我会在服务器端检查一下

【讨论】:

    【解决方案2】:

    因为您要求 SQL 的 DateTime 值的有效格式,我假设您正在使用某种存储过程来持久化数据。

    几个建议:

    1. 尽可能使用ISO-8601
    2. 使用实体框架来持久化数据
    3. 解析您的值并映射到您的模型(例如:从您的 CSV 解析您的 DateTime 值并映射到您实体的 DateTime 属性)

    例子

    // 2017-10-28T01:48:04.2399705-07:00
    var local = DateTime.Now.ToString("o");
    
    // 2017-10-28T08:51:10.1058821Z
    var utc = DateTime.UtcNow.ToString("o");
    

    【讨论】:

      【解决方案3】:

      使用此代码将此格式转换为时间跨度格式 使用 timeOfDay 格式获取日期想要将其转换为时间跨度它将整个日期时间转换为整数,这是将其插入 mysql 的最简单方法。

      TimeSpan timeOfday=startTime.TimeOfDay; DateTime fullstartDateTime =startDate.Add(timeOfday);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-02
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        • 2012-04-21
        • 1970-01-01
        相关资源
        最近更新 更多