SQL Server 消息241,级别16,状态1,第7行从字符串转换日期时间时转换失败

ruarlubt  于 2023-01-16  发布在  其他
关注(0)|答案(2)|浏览(208)

我收到此错误消息:
消息241,级别16,状态1,第7行
从字符串转换日期时间时转换失败。
在写剧本的时候。

declare
    @startdt datetime,
    @enddt datetime

SET @startdt = '2014-04-04' +'00:00:01'
SET @EndDt ='2014-04-04' + ' 23:59:59'

EXEC sp_Insert_JC_Payment @startdt,@enddt

我该怎么办?
转换脚本放在哪里?
非常感谢

5uzkadbs

5uzkadbs1#

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数据类型。
所以在你的例子中,我会尝试使用:

SET @StartDate = '2014-04-04T00:00:01'
SET @EndDate   = '2014-04-04T23:59:59'

然后你就该走了!

llew8vvj

llew8vvj2#

您可以尝试以下代码:

cast(d.Datetime as date) between @datefrom and @dateto

相关问题