在我的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,Status 3,Zeile 1
Bei der Konvertierung eine nvarchar-Datentyps in einen datetime-Datentyp liegt derWertaußerhalbdesgültigenBereichs。
我试图将其翻译为:
将char数据类型转换为datetime数据类型会导致日期时间值超出范围。“
我真的不知道我是怎么做的,所以感谢任何帮助人员
答案 0 :(得分:2)
您的问题由cast(t.F9 as datetime)
触发。
请执行:SELECT getdate();
以获取隐含的“datetime to string”转换格式。
警告:隐式转换格式在实例级别设置。它可能因服务器而异,即使在同一个公司......
这会让您感觉像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)
有效吗?