Oracle VIEW - 将 VARCHAR2 转换为 DATE 并找到 DATE 的 MIN/MAX
Posted
技术标签:
【中文标题】Oracle VIEW - 将 VARCHAR2 转换为 DATE 并找到 DATE 的 MIN/MAX【英文标题】:Oracle VIEW - Convert VARCHAR2 to DATE and find MIN/MAX of DATE 【发布时间】:2018-12-11 02:52:35 【问题描述】:数据:
Field1 Field2 BEGIN_DT END_DT
R1 R2 10012015 04082018
R1 R2 04092018 09302018
R1 R2 10012018 12319999
日期为 VARCHAR2 格式,我已使用以下方法对其进行了转换:
BEGIN_DT = to_char(to_date(BEGIN_DT,'MMDDYY'), 'MM/DD/YYYY');
END_DT to_char(to_date(END_DT,'MMDDYY'), 'MM/DD/YYYY');
我的问题是我试图找到最早的 BEGIN_DT(最小值)和最新的 END_DT(最大值)。
当我在 VIEW 中输入以下内容时,我没有得到最早的 BEGIN_DT
min(begin_dt),
max(end_dt),
我得到 04/09/2018 这不是最早的 BEGIN_DT
但是当我将这个输入到我的视图中时,我得到了最小日期,但格式错误
min(to_char(to_date(begin_dt, 'MM/DD/YYYY'))),
max(end_dt),
我得到:01-OCT-15 而不是 10/01/2015
如何以 MM/DD/YYYY 的正确格式找到日期的最小值/最大值?提前感谢您的帮助。
【问题讨论】:
您还应该修复您的数据模型。在 VARCHAR 列中存储 DATE 是一个非常非常糟糕的主意 我完全同意。它非常陈旧和过时,我的任务是清理它。耶。 【参考方案1】:你可以试试这个:
min(to_char(to_date(begin_dt, 'MMDDYYYY'), 'MM/DD/YYYY'))
或者这个:
to_char(min(to_date(begin_dt, 'MMDDYYYY')), 'MM/DD/YYYY')
将日期转换为字符串时,日期的默认模式为 01-OCT-15,因此您必须在语法中包含自己的模式。
【讨论】:
非常感谢您解释逻辑。第一个选项对我来说效果最好。我很感激!【参考方案2】:试试这个:
select to_char(begin_dt, ‘mm/dd/yyyy’) as begin_dt,
to_char(end_dt, ‘mm/dd/yyyy’) as end_dt
from (select min(to_date(begin_dt, ‘mmddyyyy’)) as begin_dt,
max(to_date(end_dt, ‘mmddyyyy’)) as end_dt
from table)
【讨论】:
以上是关于Oracle VIEW - 将 VARCHAR2 转换为 DATE 并找到 DATE 的 MIN/MAX的主要内容,如果未能解决你的问题,请参考以下文章
oracle数据库之如何将blob类型转换为varchar2
如何将oracle表中的字段由integer 转变为varchar2(50)