【发布时间】:2020-04-07 19:59:08
【问题描述】:
我有一个以下列格式表示日期的字符字段:
'yyyyMMdd-000000'
我不完全确定 0 代表什么,但我试图去掉它们然后检查日期是否与今天的日期相同:
SELECT
acctnum,
acctname
FROM
[Server].[dbo].[Table1]
Where
CAST(LEFT(myDate,8) AS DATE) = CAST(GetDate() as Date)
执行该语句时出现此错误:
从字符串转换日期和/或时间时转换失败。
我做错了什么,我该如何解决?
【问题讨论】:
-
听起来您的某些值不是有效日期。这就是为什么将它们存储为
varchar是一个坏主意。 -
收拾桌子。将列数据类型更改为日期。
-
@Larnu 这很有道理。该表是从导入中填充的。在这种情况下通常会做什么?
-
我的看法:(1) 正在将数据加载到适当数据类型的列中——在这里,听起来像
DATE。 (2) 准备要加载的数据的过程执行数据清理例程,以确保所有要加载的数据格式正确(即实际上是日期)。 (3)实际加载数据的过程具有良好的错误处理能力,可以处理遇到的任何无效数据。这里的真正目标是在数据库中拥有干净且有效的数据——一旦正确加载,您就不必担心形式和格式,因为您会知道这很好。在加载时正确处理,而不是之后!
标签: sql sql-server sql-server-2008