将表达式转换为数据类型datetime的值'#N/A'时发生算术溢出错误

0 人关注

我有一个用例,我想从一个列(2014/07/07)中获取日期,从另一个表的另一个列(8:00:00)中获取时间,但在转换时显示错误。

Msg 8115, Level 16, State 2, Line 5
Arithmetic overflow error converting expression to data type datetime.

以下是我使用的查询

select convert(datetime,convert(nvarchar(16),convert(nvarchar(8),r.eta)+' '+convert(nvarchar(7),m.[msps code time]))) from rawdata_master r join msps_port_code m on r.rkst=m.[gsis to port] where r.eta not like '&nbsp'
and m.[msps code time] not like '#N/A'

我从第二列的时间部分取值为'#N/A'。请帮助我。

6 个评论
你的问题在这里: convert(nvarchar(8),r.eta) + ' ' + convert(nvarchar(7),m.[msps code time])) 。 我想你是想连接一个日期值和一个时间值,但如果你不得不限制像 #N/A ,那么我建议你的数据中有其他不好的值。
在给定的列中,有空白和#N/A值。我不知道我应该使用什么过滤器
@paqogomez 当我浏览日志时,我发现当转换小于12:00:00的值时,它是好的,但具有13:00:00的值的行没有转换它。
可能有其他的值会导致溢出,而不仅仅是你的N/A
我已经给了nvarchar长度比实际日期小1的长度,nvarchar(9)对日期有效。
select --convert(datetime,convert(nvarchar(18),convert(nvarchar(8),r.eta)+' '+convert(nvarchar(8),m.[msps code time])) convert(datetime,convert(nvarchar, convert(nvarchar(18), convert(nvarchar(9),r.eta))+' '+convert(nvarchar(8),m.[msps code time])) from rawdata_master r join msps_port_code m on r.rkst=m.[gsis to port] where m.[msps code time] not in ('#N/A', '#NAME? ', '#REF!)
sql
sql-server-2008
Ameya Deshpande
Ameya Deshpande
发布于 2014-07-08
1 个回答
Ameya Deshpande
Ameya Deshpande
发布于 2015-03-16
已采纳
0 人赞同

找到了答案。从 nvarchar(8) 改为 nvarchar(9)

select convert(datetime,convert(nvarchar(18),convert(nvarchar(9),r.eta)+'