sql - SQL - 日期存储为 varchar 但格式化为 Julian Date
问题描述
我浏览过类似的帖子,并没有完全找到我的确切问题。基本上,我刚开始在一家公司工作,该公司现在正在与承包商一起构建数据库。我们的每个日期字段都以 Julian 格式“20190101”存储,但它们被格式化为 Varchar 而不是 DateTime。
这对于在 SQL 中使用与日期相关的函数显然是有问题的。最终,我计划让我们的承包商脚踏实地,并告诉他们改变它。但是根据我的研究,我找不到任何真正的理由来创建数据库而不使用 DateTime 格式的日期而不是懒惰。
将日期时间格式存储为 varchar 是否有任何正当理由?其次,如果这是我所坚持的,有人能告诉我我能做些什么来把它变成一种可行的格式吗?我的大部分查询都希望提取前 365 - 730 天的数据。
我目前收到错误消息“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。” 在以下代码行:
WHERE Promise_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 将始终正确地转换它。就您而言,您的价值观不好。
在某些情况下,日期和非日期需要存储在同一字段中。例如,我曾经在衍生品在特定日期定价的环境中工作——但它们也可以指定为“纽约收盘”或“伦敦开盘”或类似的东西,以表示“商业”日期。
推荐阅读
- sql - 无法将 varchar 转换为 int 或减去它们
- python - 如何将 HTML 表单中文本输入的名称设置为变量
- c++ - 修改 std::map 的键
- zip - 下载 zip 文件、解压缩和安全删除它的有效方法
- python - 给定用户的输入,如何在 O(logN) 时间内搜索字谜?
- javascript - 量角器,需要创建 key : value 对的字典
- r - R - 按组的子集
- c# - 为什么 Point[] 在 winforms 集合编辑器中不能正常工作(通过 PropertyGrid)?
- c - 在 C 中寻址多维数组
- javascript - 如何使用正则表达式将内容包装在某个 html 标记内而不影响任何 html 标记