【问题标题】:The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value in SQL Server 2005将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围
【发布时间】: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 子句中的基础日期列,而不是显式转换为字符串,然后隐式返回日期时间?你想让你的服务器哭吗?

标签: sql-server sql-server-2005 date view


【解决方案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的转换
  • 我的错误。更新了答案
猜你喜欢
  • 2019-12-23
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多