2016-09-15 60 views
0

嗨,我创建了一个表,其中一列是date类型,也可以作为PK。我试图在此列中插入值2009-01-07并出现此错误。不是日期默认格式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) 
+3

还有其他的事情正在进行,因为''2009-01-07''可以作为日期插入。尝试创建一个全新的(表格和/或)列作为日期,并查看是否可以插入到该列中。这听起来好像你可能有一个触发器或检查约束调用一个函数或一些语言设置 - 或类似的 - 在表上失败的价值工作。或者说,它是其他列值中的一个,当然不会。 –

+3

你可以编写另一个_INSERT_查询明确调用列的名称吗?例如:'INSERT INTO Table_Name(Date_PK,...)VALUES('2009-01-07',...)'。只是想确定哪个列引发异常。 '2009-01-07'应该可以。 –

+0

[在插入日期时间时从字符串转换日期和/或时间时转换失败]的可能重复(http://stackoverflow.com/questions/14119133/conversion-failed-when-converting-date-and-or-time- from-character-string-while-i) – captainsac

回答

0

你的价值'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服务器的问题。有时执行的顺序绝对不是人们所期望的。有几个问题与转换错误......

什么,你可以尝试

  • 使用ODBC格式(这被视为DATETIME立即)
  • 声明一个变量,这个值并把它放在地方
0

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

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

再次感谢。