将 varchar 数据类型转换为 datetime 数据类型导致 TSQL 中的值超出范围
Posted
技术标签:
【中文标题】将 varchar 数据类型转换为 datetime 数据类型导致 TSQL 中的值超出范围【英文标题】:Conversion of a varchar data type to a datetime data type resulted in an out-of-range value in TSQL 【发布时间】:2017-09-28 12:29:37 【问题描述】:在我的 T-SQL 选择中,我的日期时间似乎有错误
select
t.F47, t.F53, t.F40, t.F162, t.F163,
N'10' as kostenart, t.F39, t.F2, t.F5,
convert(nvarchar, cast(t.F9 as datetime), 112),
t.PARID, 20170928135800 as exportzeitstempel
from
T_TRANS6 as t
where
t.F20 = N'Erledigt'
and t.F9 < convert(datetime, '01.09.2017 00:00:00', 104)
错误信息是德语,上面写着:
Meldung 242,Ebene 16,状态 3,Zeile 1 Bei der Konvertierung eines nvarchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs。
我试着把它翻译成:
将 char 数据类型转换为日期时间数据类型导致日期时间值超出范围。"
我真的不知道我是怎么做到的,谢谢大家的帮助
【问题讨论】:
看起来您在选择中将 F9 转换为日期时间,您可能还需要在 where 子句中执行此操作。 @JacobH 嘿,感谢您抽出宝贵时间,帮我,我不是已经这样做了吗? 我在 t.F9 的 where 子句中没有看到强制转换函数... 英文消息其实是:“将char数据类型转换为datetime数据类型导致datetime值超出范围。” 在典型的德国 SQL 服务器安装中,CAST('dd.MM.yyyy HH:mm:ss' as datetime)
通常可以工作,因为它是本地标准格式。 CONVERT
与 104 第三个参数实际上会尝试将日期时间转换为给定格式的 varchar。
【参考方案1】:
你的问题是由cast(t.F9 as datetime)
触发的。
请使用:SELECT getdate();
获取隐式的“日期时间到字符串”转换格式。
警告:在实例级别设置隐式转换格式。它可能因服务器而异,即使在同一公司中也是如此......
这会给你一些类似dd.MM.yyyy HH:mm:ss
或yyyy-MM-dd HH:mm:ss
或...
给定的格式是所有 F9 TRANS6 表记录的预期和必需!
具有错误格式模式的单个 TRANS6.F9 将引发此错误。所以分析你的 F9 数据,找到相关的行,清理它们并重试......
注意:CONVERT(NVARCHAR(8), getdate(),112) 得到一个类似YYYYMMDD
的字符串(例如:'20170928'),女巫是日期的唯一可排序字符串格式...
编辑:F9 = '2016.10.30' 和隐式转换期望 '2016-10-30' !!
试试这个:
select
t.F47, t.F53, t.F40, t.F162, t.F163,
N'10' as kostenart, t.F39, t.F2, t.F5,
convert(nvarchar, convert(datetime,t.F9,102), 112),
t.PARID, 20170928135800 as exportzeitstempel
from
T_TRANS6 as t
where
t.F20 = N'Erledigt'
and t.F9 < convert(datetime, '01.09.2017 00:00:00', 104)
有效吗?
【讨论】:
所以我做了 SELECT getdata() 这就是结果:2017-09-28 15:12:04.050 我的F9里的数据是这样的2016.10.30以上是关于将 varchar 数据类型转换为 datetime 数据类型导致 TSQL 中的值超出范围的主要内容,如果未能解决你的问题,请参考以下文章
即使没有 datetime 列,也获取“将 varchar 数据类型转换为 datetime 数据类型导致超出范围的值”
将 varchar 2007-12-19-11.57.17.366731 转换为 datetime 数据类型
Polybase - 将数据类型 VARCHAR 转换为 DATETIME 时出错
如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误
消息 242:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围
System.Data.SqlClient.SQLException:将 varchar 数据类型转换为 datetime