【问题标题】:Insert date value yyyy-mm-dd hh:mm:ss into SQL Server将日期值 yyyy-mm-dd hh:mm:ss 插入 SQL Server
【发布时间】:2017-01-19 01:43:39
【问题描述】:

我需要插入一些带有日期值的记录。格式为'2006-07-26 00:00:00.000'. 当我尝试查询时出现错误

从字符串转换日期和/或时间时转换失败

如何格式化才能插入?

INSERT [dbo].[NAMES] (
    [NAME_CODE]
    ,[NAME_ID]
    ,[NAME_CODE_ID]
    ,[PREVIOUS_ID]
    ,[GOVERNMENT_ID]
    ,[PREV_GOV_ID]
    ,[PREFIX]
    ,[FIRST_NAME]
    ,[MIDDLE_NAME]
    ,[LAST_NAME]
    ,[SUFFIX]
    ,[NICKNAME]
    ,[PREFERRED_ADD]
    ,[BIRTH_DATE]
    ,[BIRTH_CITY]
    ,[BIRTH_STATE]
    ,[BIRTH_ZIP_CODE]
    ,[BIRTH_COUNTRY]
    ,[BIRTH_COUNTY]
    ,[DECEASED_DATE]
    ,[DECEASED_FLAG]
    ,[RELEASE_INFO]
    ,[CREATE_DATE]
    ,[CREATE_TIME]
    ,[CREATE_OPID]
    ,[CREATE_TERMINAL]
    ,[REVISION_DATE]
    ,[REVISION_TIME]
    ,[REVISION_OPID]
    ,[REVISION_TERMINAL]
    ,[ABT_JOIN]
    ,[TAX_ID]
    ,[PersonId]
    ,[PrimaryPhoneId]
    ,[Last_Name_Prefix]
    ,[LegalName]
    )
VALUES (
    N'P'
    ,2
    ,N'P000000002'
    ,N'NULL'
    ,363768306
    ,N'NULL'
    ,N'Dr.'
    ,N'Pever'
    ,N'G'
    ,N'Giper'
    ,N'NULL'
    ,N'NULL'
    ,N'PERM'
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ,N'N'
    ,N'NULL'
    ,N'2006-07-26 00:00:00.000'
    ,N'1900-01-01 08:39:02.000'
    ,N'SCT'
    ,1
    ,N'2014-06-27 00:00:00.000'
    ,N'1900-01-01 15:39:44.617'
    ,N'SSTULTS'
    ,1
    ,N'*'
    ,N'NULL'
    ,1
    ,N'NULL'
    ,N'NULL'
    ,N'NULL'
    ) GO

【问题讨论】:

  • 我猜您想将 NULL 插入某些列,但您尝试插入无法转换为日期时间的字符串文字“NULL”。在处理 nvarchar 数据时,您只需要前导 N。将你的 NULL 设为 NULL,问题可能就会消失。
  • Create_Date、Create_Time、Revision_Date 和 Revision_Time 列的数据类型是什么。另外,Birth_Date 字段是否可以为空?
  • 类型是日期时间,我改为实际的空值并插入

标签: sql-server


【解决方案1】:

如果 BIRTH_DATEDECEASED_DATE 是日期字段,那么这些字段将失败,因为您分配的是字符串 NULL 而不是空值(好吧,从技术上讲不是空值,但你知道我的意思) .其他 NULL 字符串也是一个非常糟糕的主意 - 如果您想要 null,则使用它,而不是值为 NULL 的字符串。

【讨论】:

    【解决方案2】:

    SQL Server 支持多种格式 - 请参阅MSDN Books Online on CAST and CONVERT。这些格式中的大多数依赖取决于您的设置 - 因此,这些设置有时可能有效 - 有时无效。在尝试将字符串文字转换为日期值时尤其如此。

    解决此问题的方法是使用 SQL Server 支持的(稍作调整的)ISO-8601 日期格式 - 这种格式始终有效 - 无论您的SQL Server 语言和日期格式设置。

    SQL Server 支持的ISO-8601 format 有两种形式:

    • YYYYMMDD 仅用于日期(无时间部分);请注意:没有破折号!,这非常重要! YYYY-MM-DD独立于 SQL Server 中的日期格式设置,并且适用于所有情况!

    或:

    • YYYY-MM-DDTHH:MM:SS 用于日期和时间 - 请注意:此格式破折号(但它们可以省略),以及固定的T 作为日期和时间之间的分隔符DATETIME 的一部分。

    这对 SQL Server 2000 和更高版本有效。

    如果您使用 SQL Server 2008 或更新版本以及 DATE 数据类型(仅限 DATE - 不是 DATETIME!),那么您确实也可以使用 YYYY-MM-DD 格式并且也适用于 SQL Server 中的任何设置。

    不要问我为什么整个话题如此棘手和令人困惑——事情就是这样。但是使用YYYYMMDD 格式,您应该可以适应任何版本的 SQL Server 以及 SQL Server 中的任何语言和日期格式设置。

    对于 SQL Server 2008 和更新版本,如果您只需要日期部分,建议使用 DATE,如果同时需要日期和时间,则使用 DATETIME2(n)。如果可能,您应该尝试开始逐步淘汰DATETIME 数据类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2015-11-03
      相关资源
      最近更新 更多