【发布时间】:2016-07-19 20:03:53
【问题描述】:
我有一列保存为字符数据类型。本专栏将用作日期。该列采用该格式“YYYY-MM-DD”。
这是一个问题,因为如果我需要按日期过滤,我必须去
select col_1, col_2
from table
where date LIKE '2016-04%;
如果我想搜索一个日期范围,这会变成一个巨大的复杂混乱。
将其转换为“日期”数据类型的最简单方法是什么?我希望它继续按 YYYY-MM-DD 顺序排列(无时间戳)。
我的最终目标是能够以如下格式搜索日期:
select col_1, col_2
from table
where date between 2016-01-01 AND 2016-05-31;
你们有什么推荐的吗?如果我使用 alter 语句来转换我的数据类型,我很害怕我会破坏我的日期。 (我保存了一份数据副本,可以再次上传,但需要很长时间。)
编辑:这是一张非常大的桌子。
编辑第 2 部分:我最初将数据存储为 varchar 数据类型,因为我的日期没有正确上传,并且当我尝试另存为日期数据类型时收到错误消息。此列中的每个日期都按“YYYY-MM-DD”的顺序排列。我的解决方案是将它保存为 varchar 以避免错误消息(我无法弄清楚出了什么问题。我什至摆脱了前导和尾随空格。)
【问题讨论】:
-
“因为我的日期没有正确上传,当我尝试保存为日期数据类型时收到一条错误消息”,这应该是一个公平的警告开始。使用正确数据类型的一个原因是避免存储无效数据(例如 2016-16-00 或 2015-02-29)
-
没有一个日期有这样奇怪的格式,我唯一的猜测是后面有空格。
-
前导或尾随空格不会阻止转换为日期。
select ' 2016-01-01 '::date工作得很好