将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

Posted

技术标签:

【中文标题】将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围【英文标题】:The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value in SQL Server 2005 【发布时间】:2013-03-27 05:43:04 【问题描述】:

我写了一个视图,其中表格中的日期被转换为

convert(varchar, date, 103) 

并取别名为 DATE1,然后我编写了如下查询:

select DATE1  
from date_demo
WHERE  MONTH(DATE1) = '12'

我只想检索月份 = 'december' 为 12 的特定记录

我遇到了一个错误:

将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。

这是在 SQL Server 2005 中,请帮助我

【问题讨论】:

为什么不使用 where 子句中的基础日期列,而不是显式转换为字符串,然后隐式返回日期时间?你想让你的服务器哭吗? 【参考方案1】:

正如大卫建议的那样,您应该使用日期列而不是转换为字符串然后再转换回日期时间列。

但是,当您将其转换回日期时间时,您需要指定Date Time Style

select DATE1  from date_demo
WHERE  MONTH(convert(datetime,DATE1,103))= '12'

另外你需要指定varchar数据类型的长度阅读这篇文章bad habits to kick declaring varchar without length

【讨论】:

这不是错误所指的,SQL可以很好地完成从字符串到int的转换 我的错误。更新了答案

以上是关于将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围的主要内容,如果未能解决你的问题,请参考以下文章

将COleDateTime类型数据转换成char *数据

如何将 varchar 日期转换为 datetime2 日期

如何将DateTime类型转换成String类型

在net中怎么把datetime类型转换成毫秒数

将 datetime2 数据类型转换为 datetime 数据错误

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围 - 未使用 DateTime2