【问题标题】:Why does 1900-01-01 00:00:00.000 appear after inserting data from excel into SQL table?为什么将excel中的数据插入SQL表后出现1900-01-01 00:00:00.000?
【发布时间】:2019-07-10 15:53:41
【问题描述】:

我正在尝试将工作表中的日期插入到 SQL 的表中。工作表中日期的原始来源来自与 sql 的连接,并且日期字段已使用 Cast(interview_date as date) 设置,但是一旦填充了工作表,我需要重新插入到 SQL 中的另一个表中。当我这样做时,我在表格的日期字段(即日期时间)中得到 1900-01-01 00:00:00.000 。我提取到 excel 日期格式是 yyyy-mm-dd 并且它在我插入的 Sql 表上是一样的。

我在 VBA 中尝试过以下插入,有问题的 3 个字段是 sdate_confirmed、sdate_interview 和 rundate。

我已将字段声明为

Dim sForename As String
Dim sSurname As String
Dim sdate_confirmed As Date
Dim sdate_interview As Date
Dim sNumerator1 As Integer
Dim sDenominator1 As Integer
Dim sNumerator2 As Integer
Dim sDenominator2 As Integer
Dim sNumerator3 As Integer
Dim sDenominator3 As Integer
Dim sRundate As Date
Dim sDO_NOT_DELETE As Integer

我正在使用 Excel 2010 和 SQL Server 2012。

提前感谢您的帮助。

我已经尝试在 VBA 中插入 cdate() 和 datevalue() 到...

Excel 工作表中没有空日期或缺失日期。

oCon.Execute "Insert into [Interview_Info].[dbo].Interview (Forename,Surname,date_confirmed,date_interview,Numerator1,Denominator1,Numerator2,Denominator2,Numerator3,Denominator3,Rundate,DO_NOT_DELETE) " & _
             "Values ('" & sForename & "','" & sSurname & "'," & sdate_confirmed & "," & sdate_interview & ",'" & sNumerator1 & "','" & sDenominator1 & "','" & sNumerator2 & "','" & sDenominator2 & "','" & sNumerator3 & "','" & sDenominator3 & "'," & sRundate & ",'" & sDO_NOT_DELETE & "')"

我希望将 Excel 中字段中的日期插入到 [Interview_Info].[dbo].Interview 中,并将具有正确的日期,如 excel 工作表中所示,而不是 1900-01-01 00:00:00.000

【问题讨论】:

    标签: sql vba


    【解决方案1】:

    我解决了。

    我一定需要小睡一下!

    我保留了原始脚本并修正了格式。

    一切正常。

    【讨论】:

      【解决方案2】:

      根据我所看到的,我很惊讶 INSERT 语句成功执行并将日期字段留空,但让我感到惊讶的是 - 您需要按照您的方式将日期值用单引号括起来包裹你的字符串。即使您将它们 DIM 为 Date 类型,当您将它们与其他字符串连接以构成插入语句时,它们也会被转换为字符串。

      Values 子句的开头应如下所示:

      "Values ('" & sForename & "','" & sSurname & "','" & sdate_confirmed & "',"' & sdate_interview & "','" & ...
      

      我建议 - 而不是将命令字符串与执行它的调用连接在同一行

      oCon.Execute "Insert into [Interview_Info]

      将您的命令字符串连接成一个变量,您可以在执行它之前检查(以确保日期值用单引号括起来)。

      string cmd = "Insert into [Interview_Info]...
      oCon.Execute cmd
      

      【讨论】:

      • 嗨,杰夫,感谢您的回复。我尝试应用上述但得到错误编译错误预期标识符,然后一旦我过去它有一个编译错误语法错误
      • 经过一些消除过程 sdate_interview 和 srundate 在插入撇号后插入日期,但格式为 yyyy-dd-mm 而不是 yyyy-mm-dd。 sdate_confirmed 返回错误超出范围。所以有两个领域正在工作......有点!
      • 那些YYYY-DD-MM的答案是'" & Format(sRundate, "yyyy-mm-dd") & "',
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      相关资源
      最近更新 更多