【问题标题】:Column of Date type and inserting value into it日期类型的列并在其中插入值
【发布时间】:2016-09-15 06:02:38
【问题描述】:

您好,我创建了一个表,其中一列是date 类型,也可用作PK。我尝试将值 2009-01-07 插入此列并出现此错误。 Date默认格式不是yyyy-mm-dd吗?我不明白这个。

Msg 241, Level 16, State 1, Line 3
Conversion failed when converting date and/or time from character string.

这是我的查询:

INSERT INTO Table_Name
Values ('2009-01-07', other column values)

【问题讨论】:

  • 其他事情正在发生,因为'2009-01-07' 可以作为日期插入。尝试创建一个全新的(表格和/或)列作为日期,看看是否可以插入该列。在我看来,好像您可能有一个触发器或检查约束调用一个函数或某些语言设置 - 或类似的东西 - 在无法处理该值的表上。或者它是当然失败的other column values 之一。
  • 你能写另一个 INSERT 查询显式调用列的名称吗?例如:INSERT INTO Table_Name (Date_PK, ...) VALUES ('2009-01-07', ...)。只是想确定哪一列引发了异常。 2009-01-07 应该没问题。
  • 执行选择GETDATE(),参考它的输出并相应地改变你的日期格式
  • 确保列出目标列namesinsert into table_name (col1, col2, ...) values (...) - 可能表中的列与它们在values 列表中出现的顺序不同

标签: sql sql-server type-conversion


【解决方案1】:

你的值'2009-01-07'应该被转换。

日期字面量总是麻烦的根源......最好是,使用任何一个

  • 未分离:20090107
  • ODBC:{d'2009-01-07'}
  • ISO8601:2009-01-07T00:00:00

但是您的格式是短 ISO 8601 并且应该可以工作...

一些可能的原因:

  • VALUES 列表中的其他值
  • 触发器
  • 约束
  • 正如 a_horse_with_no_name 在评论中所说:INSERT INTO Table(col1, col2, ...) 之后没有列列表以不同的顺序陈述您的值的风险很大,因此将值与错误的列配对...
  • 无效(但好看)日期,例如2016-06-31

或者是一个众所周知的 SQL-Server 问题。有时执行顺序绝对不是人们期望的那样。转换错误有几个问题...

你可以尝试什么

  • 使用 ODBC 格式(立即被视为DATETIME
  • 用这个值声明一个变量并将其放置在适当的位置

【讨论】:

    【解决方案2】:

    感谢大家的及时回复。我阅读并尝试了所有这些并找出了原因。

    1. '2009-01-07' 可以插入到数据类型为“日期”的列中,如果没有 CONSTRAINT 存在问题;
    2. 我的问题是由该列上的 CHECK 约束引起的。 最初我将 CONSTRAINT 设置为 Column_Name = '星期三' 在我修改为 DATEName(dw,[Column_Name]) = '星期三' 插入开始起作用了。

    再次感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 2022-11-17
      • 2012-06-16
      • 2013-02-18
      • 2015-06-09
      • 2016-01-21
      • 2023-03-14
      • 2021-02-03
      相关资源
      最近更新 更多