所以我写了一个SQL查询,它给了我一个奇怪的错误:
转换varchar值时转换失败' J'到数据类型int
我把它缩小到LEFT(ProjApprovelDate,1)
,这出于某种原因给了我一个J.
ProjApprovelDate大部分时间都是一个DateTime,有一些实例输入不正确,而是一个int。为了找到这些,我使用了(LEFT(ap.ApprovalDate,1) != 1 and LEFT(ap.ApprovalDate,1) != 2)
。如果格式错误,它始终以1或2开头。整个列(在原始表中)是int格式,并显示大多数日期,如20170614
,但有几个显示像1170614
。我将这些转换为正确的格式并将它们全部插入到一个新表中,并将此列作为DateTime,以便正确地将它们转换为日期。
在审核以确保我得到它们时,我发现这个有趣的案例,那些已经正确格式化为DateTime的案例给了我一个J.
所以我的问题是为什么采用DateTime的第一个LEFT
字符为输出提供J
?
答案 0 :(得分:6)
隐式转换是一个字符串,所以......
Select cast(getdate() as varchar(25))
,left(getdate(),1)
<强>返回强>
(No column name) (No column name)
Jun 14 2017 10:28AM J
查看https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine
只是为了好玩,试试
Select left(25,1)