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:将 VARCHAR2 列更改为 CLOB

如何将oracle表中的字段由integer 转变为varchar2(50)

oracle varchar2 为啥改不成clob

将时间戳插入 Oracle 数据库中的 Varchar2 列

实体框架oracle:将超过2000个字符插入VARCHAR2(4000 CHAR)失败