SQL-日期存储为varchar,但格式为儒略日期

时间:2019-10-29 19:04:40

标签: sql datetime

我浏览了类似的帖子,但还没有完全找到我的确切问题。基本上,我刚在一家正在与承包商建立数据库的公司开始工作。我们的日期字段中的每个日期字段都以Julian格式“ 20190101”存储,但它们的格式设置为Varchar而不是DateTime。

对于在SQL中使用与日期相关的函数,这显然是有问题的。最终,我计划将承包商的脚踩到火上,并告诉他们进行更改。但是基于我的研究,我找不到任何不使用DateTime格式创建数据库(而不是惰性)的真正原因。

是否有合理的理由将日期时间格式存储为varchar?其次,如果这就是我所坚持的,那么有人可以启发我如何使它变成可行的格式吗?我大部分的查询都希望拥有前365天至730天的数据。

我当前收到错误消息“将varchar数据类型转换为datetime数据类型导致超出范围的值。”在以下代码行上:

WHERE Promise_Date > DATEADD(year,-1, GETDATE())

1 个答案:

答案 0 :(得分:1)

您应该找到转换失败的地方:

SELECT Promise_Date
FROM t
WHERE TRY_CONVERT(date, Promise_Date) IS NULL;

同时,使转换明确:

WHERE TRY_CONVERT(date, Promise_Date) > DATEADD(year,-1, GETDATE())

通常,没有充分的理由将数据存储为字符串。如果您确实使用字符串,那么YYYYMMDD是一个很好的选择。 SQL Server将始终正确地对其进行转换。就您而言,您的价值观不正确。

在某些情况下,日期和非日期需要存储在同一字段中。例如,我曾经在一个衍生工具在特定日期定价的环境中工作,但也可以将其指定为“纽约市收盘价”或“伦敦开市价”或类似名称,以表示“营业”日期。