【问题标题】:Oracle: how to convert varchar2 to time?Oracle:如何将 varchar2 转换为时间?
【发布时间】:2021-05-17 14:12:12
【问题描述】:

如何将varchar2(即字符串)转换为timestamp

原始数据

08:00 AM - 06:00 PM
10:00 AM - 04:00 PM

所以我可以比较它们。

--STORE
CREATE TABLE STORE(
StoreID         VARCHAR2(10)  NOT NULL,
StoreAddress    VARCHAR2(50),
WeekDaysHours   VARCHAR2(20),
WeekendHours    VARCHAR2(20),
PRIMARY KEY(StoreID));

价值观

INSERT INTO STORE VALUES ('S004', 'High Drive', '09:00 AM - 05:00 PM', '08:00 AM - 06:00 PM' );
INSERT INTO STORE VALUES ('S005', 'Snake Rd', '09:00 AM - 09:00 PM', '10:00 AM - 04:00 PM' );

【问题讨论】:

  • 你想要的输出是什么,你已经尝试了什么?
  • 这能回答你的问题吗? Convert a string date into datetime in Oracle
  • @pmdba 正如我所提到的,我正在尝试在它们之间进行比较,例如哪个更早。我仍然找不到任何类似的示例,我发现的所有示例都有日期格式,这不是数据的一部分。
  • @Martheen 它的日期不是数据的一部分
  • Oracle 没有“时间”数据类型。当您说8:00am - 06:00pm 时,这是否意味着同一天?它们可能相隔几天发生吗?您将不得不对日期做出一些假设:即两个时间都发生在同一日期,以便比较它们的顺序。否则没有什么可说的。例如,21 年 5 月 1 日晚上 10:00 在 21 年 5 月 1 日上午 8:00 之后,但在 21 年 5 月 2 日上午 8:00 之前。在不知道日期组件的情况下,我不知道如何计算它们之间的间隔。

标签: database oracle


【解决方案1】:

如果所有值都遵循相同的格式并且有效(即您没有类似 08:BX FZ - #7-25 AM 的内容),则使用 substr(提取字符串的每个部分)并应用适当格式的 to_date 函数面具。日期部分将是“今天”

[编辑:不,不会是“今天”。引用@mathguy 的评论(谢谢@mathguy)]

日期部分不会是今天。默认为“当年”和“当月”,但默认“当月日”为 1。日期部分为当月的第一天。

我正在修改我的会话只是为了知道什么是什么:

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi';

Session altered.

SQL> with test (col) as
  2    (select '08:00 AM - 06:00 PM' from dual)
  3  select to_date(substr(col,  1, 8), 'hh:mi am') first_part,
  4         to_date(substr(col, 13, 8), 'hh:mi pm') second_part
  5  from test;

FIRST_PART       SECOND_PART
---------------- ----------------
01.05.2021 08:00 01.05.2021 18:00

SQL>

现在这些是日期,您可以比较它们。

【讨论】:

  • 日期部分不会是今天。默认值为“当前年份”和“当前月份”,但默认“月份日期”为 1。日期部分将是当前月份的第一天。但这并没有改变答案。
  • 谢谢你,@mathguy。我将您的评论复制/粘贴到答案中。
猜你喜欢
  • 2020-12-20
  • 2021-06-16
  • 2017-01-17
  • 2022-01-23
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
相关资源
最近更新 更多