Sql 获取一个错误,指出将varchar数据类型转换为datetime导致值超出范围

Sql 获取一个错误,指出将varchar数据类型转换为datetime导致值超出范围,sql,sql-server-2008,Sql,Sql Server 2008,我有这个sql语句 select ord_type, case when entered_dt between '2013-02-01' and '2013-02-31' then 1 end from oehdrhst_sql 我一直在犯这个错误 将varchar数据类型转换为datetime数据类型导致值超出范围 有什么问题吗。。。我似乎找不到解决方案选择ord\u类型 SELECT ord_type , CASE

我有这个sql语句

select ord_type,
       case 
            when entered_dt  between '2013-02-01' and '2013-02-31' then 1 
       end  
from oehdrhst_sql
我一直在犯这个错误

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

有什么问题吗。。。我似乎找不到解决方案

选择ord\u类型
SELECT  ord_type
      , CASE WHEN entered_dt  BETWEEN '20130201' AND '20130228' --<-- There are only 28 days in Feb 
             THEN 1 ELSE NULL END  
FROM oehdrhst_sql
,在“20130201”和“20130228”之间输入时的大小写--
选择ord类型

,在“20130201”和“20130228”之间输入\u dt时的大小写--SQL Server支持多种格式-请参阅。大多数格式取决于您的设置,因此,这些设置有时可能有效,有时无效

解决此问题的方法是使用SQL Server支持的(稍作调整的)ISO-8601日期格式,无论您的SQL Server语言和日期格式设置如何,此格式始终有效

SQL Server支持的有两种风格:

  • YYYYMMDD
    仅适用于日期(无时间段);注意:无破折号,这非常重要
    YYYY-MM-DD
    独立于SQL Server中的日期格式设置,在所有情况下都将工作
或:

  • 日期和时间的
    YYYY-MM-DDTHH:MM:SS
    -此处注意:此格式有破折号(但可以省略),并且在
    DATETIME
    的日期和时间部分之间有一个固定的
    T
    分隔符
这对SQL Server 2000及更新版本有效

如果您使用SQL Server 2008或更高版本以及
日期
数据类型(仅
日期
-
日期时间
!),那么您确实也可以使用
YYYY-MM-DD
格式,这也适用于SQL Server中的任何设置


不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用
YYYYMMDD
格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置。

SQL Server支持多种格式-请参阅。大多数格式取决于您的设置,因此,这些设置有时可能有效,有时无效

解决此问题的方法是使用SQL Server支持的(稍作调整的)ISO-8601日期格式
,无论您的SQL Server语言和日期格式设置如何,此格式始终有效

SQL Server支持的有两种风格:

  • YYYYMMDD
    仅适用于日期(无时间段);注意:无破折号,这非常重要
    YYYY-MM-DD
    独立于SQL Server中的日期格式设置,在所有情况下都将工作
或:

  • 日期和时间的
    YYYY-MM-DDTHH:MM:SS
    -此处注意:此格式有破折号(但可以省略),并且在
    DATETIME
    的日期和时间部分之间有一个固定的
    T
    分隔符
这对SQL Server 2000及更新版本有效

如果您使用SQL Server 2008或更高版本以及
日期
数据类型(仅
日期
-
日期时间
!),那么您确实也可以使用
YYYY-MM-DD
格式,这也适用于SQL Server中的任何设置


不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用
YYYYMMDD
格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置。

输入的数据类型是什么\u dtdatetime…………2月31日?!?!?!?!我是个白痴。。。谢谢..输入的数据类型是什么\u dtdatetime…..2月31日?!?!?!?!我是个白痴。。。谢谢..我不知道谁会投反对票-这个答案完全正确,突出了两个主要问题-没有使用正确的ISO-8601基于字符串的日期格式,不尊重2013年2月只有28天这一事实……我猜这里有一些人只是否决投票,因为他们可以:S.我不知道谁会否决这个-这个答案完全正确,并突出了两个主要问题-没有使用正确的ISO-8601基于字符串的日期格式,而且不尊重2013年2月只有28天这一事实……我猜这里有些人只是为了投票而放弃投票,因为他们可以:S。