Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL—存储为varchar但格式为Julian Date的日期_Sql_Datetime - Fatal编程技术网

SQL—存储为varchar但格式为Julian Date的日期

SQL—存储为varchar但格式为Julian Date的日期,sql,datetime,Sql,Datetime,我浏览过类似的帖子,还没有找到我的确切问题。基本上,我刚开始在一家公司工作,这家公司目前正在与承包商建立数据库。我们的每个日期字段都以朱利安格式“20190101”存储,但它们的格式是Varchar而不是DateTime 在SQL中使用与日期相关的函数显然有问题。最终,我计划让我们的承包商站在火边,告诉他们改变现状。但根据我的研究,我找不到任何真正的理由,除了懒惰之外,不使用日期时间格式创建数据库 是否有正当理由将日期时间格式存储为varchar?第二,如果这就是我所坚持的,有谁能告诉我,我能做

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

在SQL中使用与日期相关的函数显然有问题。最终,我计划让我们的承包商站在火边,告诉他们改变现状。但根据我的研究,我找不到任何真正的理由,除了懒惰之外,不使用日期时间格式创建数据库

是否有正当理由将日期时间格式存储为varchar?第二,如果这就是我所坚持的,有谁能告诉我,我能做些什么,使之成为一个可行的格式?我的大多数查询都希望获得前365-730天的数据

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


WHERE Promise\u Date>DATEADD(year,-1,GETDATE())
您应该找到转换失败的地方:

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将始终正确地转换它。在你的情况下,你的价值观不好


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

您使用的是什么RDBMS?SQL Server?此外,“20190101”不是朱利安日期。SQL Azure是我们正在使用的。您给我的第二个选项很有效。实际上我刚刚和我们的承包商谈过,我实际上是在查询我们的登台数据库;他们说,他们计划对实时版本进行适当的格式更改。