查询:分配错误datetime2

时间:2013-07-22 19:23:14

标签: sql sql-server type-conversion

我想使用以下代码分配'1392-04-31'

DECLARE @t DATETIME
SET @t = '92-04-31'

我看到了这个错误:

Conversion failed when converting date and/or time from character string.

任何人都知道为什么?

4 个答案:

答案 0 :(得分:2)

解决方案是: 使用datetime2!

DECLARE @t datetime2
SET @t = '1392-04-30'

因为您无法使用日期时间: 日期时间中存储的最小日期是1753年1月1日。因此1392不可存储。

4月有30天。

使用带日期时间的格式化日期:

其次,当你在Sql Server中写一个日期时,我喜欢的格式是{d'YYYY-MM-DD'},所以在你的情况下变成:

DECLARE @t DATETIME
SET @t = {d '1992-04-30'}

要完成此讨论,如果您想使用hh mm ss,则必须使用以下格式:{ts'yyy-mm-dd hh:mm:ss.mmm'}

DECLARE @t DATETIME
SET @t = {ts '1992-04-30 23:59:59.123'}

答案 1 :(得分:0)

您尝试设置的日期可能无效。

还有几种方法可以将SQL中的日期表示为字符串,具体取决于语言,日期格式和其他设置。通常,最安全的方法是使用'YYYYMMDD'格式。

下面的文章也将回答这个问题:为什么1753年是datetime的最早日期?

如果您想了解一些详细信息,请阅读此内容:

http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

答案 2 :(得分:0)

试试这个:

declare @t DATETIME
set @t = '1992-04-30 10:54:30'

答案 3 :(得分:-1)

首先,4月只有30天。我不打算花时间在历史上查看1392是否是这种情况,但无论哪种方式,我都非常确定日期4/31/1392对SQL Server DATETIME无效。

此外,您应该使用'01 -01-2013'格式的全年。

尝试以下操作,您将获得2013年1月1日12:00 AM的输出。

declare @t DATETIME
set @t = '01-01-2013'
PRINT @t

以上内容适用于任何有效日期。