Sql 获取一个错误,指出将varchar数据类型转换为datetime导致值超出范围
我有这个sql语句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
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。