【发布时间】:2017-06-14 14:26:14
【问题描述】:
所以我正在编写一个 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?
【问题讨论】:
-
如果你在 12 月的时间戳上这样做,你会得到 D。;)
标签: sql sql-server tsql datetime