Mik*_*ike 3 sql t-sql sql-server datetime
所以我正在编写一个SQL查询,它给了我一个奇怪的错误:
将varchar值'J'转换为数据类型int时转换失败
我将它缩小到a 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.
所以我的问题是为什么采用LEFTDateTime 的第一个字符给出J输出?
隐式转换是一个字符串,所以......
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)