【问题标题】:How to order a VARCHAR2 column representing date and time with AM and PM Oracle SQL?如何使用 AM 和 PM Oracle SQL 订购表示日期和时间的 VARCHAR2 列?
【发布时间】:2019-11-19 16:24:34
【问题描述】:

您好,我有以下列,我想按日期从最早到最晚进行排序。格式如下所示。

08/16/2019 08:09:51 AM

我想出了这个,但它给了我一个错误。

ORDER BY date_format(STR_TO_DATE(`END_TIME`,'%m-%d-%y %h:%i:%s %p'),'%Y-%m-%d %H:%i:%s')

我不能严格按日期订购,因为下午 2 点早于上午 8 点,这是错误的,所以我尝试以正确的格式将其放入,我觉得我很接近。有什么想法吗?

【问题讨论】:

  • 投它作为日期应该可以工作我猜order by cast(end_time as date)
  • 这看起来像 mysql,而不是 oracle。请更新标签。
  • 如果您正处于项目的设计阶段,我会重构为使用基于 DATE 的实际类型作为日期值,而不是 VARCHAR2
  • 您是否对Oracle公司(也是MySQL DB的所有者)与Oracle DB感到困惑?这种语法不属于Oracle DB。
  • @BarbarosÖzhan 倒数第四个...对不起,他没有提到它是 mysql,但他回复了那个问他的 OldProgrammer...

标签: sql oracle


【解决方案1】:

也许我错了,但我看不出这里有什么问题:

select to_char(to_date(Date_c,'mm/dd/yyyy hh:mi:ss AM'),'mm/dd/yyyy hh:mi:ss AM') 
from myTable
order by to_date(Date_c,'mm/dd/yyyy hh:mi:ss AM');

就是这样:

select *
from myTable
order by to_date(Date_c,'mm/dd/yyyy hh:mi:ss AM');

这里是DEMO

【讨论】:

  • 这是正确答案。非常感谢 :) 我的格式是错误的,我之前有 AM,但我认为它不会接收 PM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多