【问题标题】:Extract hour from timestamp in 12 hour format with AM/PM indicator oracle使用 AM/PM 指示器 oracle 从 12 小时格式的时间戳中提取小时
【发布时间】:2016-04-22 21:23:50
【问题描述】:

我正在尝试从带有 A.M/P.M 指示器的 12 小时格式的时间戳列 (oracle) 中提取小时。

“子日期”列的值为 22-APR-20 04.18.40.000000000 PM

Extract(HOUR from subdate) 函数返回

16

但是,我希望值是下午 4 点

我已经尝试了 trunc 和 to_char 函数的各种选项,但它们都没有给出所需的输出。

你能帮忙解决这个问题吗!

谢谢!

【问题讨论】:

  • 你想要 04:18 还是 04:00?
  • 你关心是 04:00 还是 04.00 还是 4:00 还是 4.00? (前导零,无论是:还是。)

标签: sql database oracle


【解决方案1】:

由于您在谈论格式,因此您不仅仅是“提取小时” - 您实际上是在提取字符串。

TO_CHAR(subdate, 'hh.mi AM')

应该可以解决问题。

添加:基于 cmets。如果你想要 : 分隔符而不是 .这很简单,只需在格式掩码中更改它。如果要向下舍入到小时,请使用 trunc(subdate, 'hh') 而不是 subdate。如果您需要删除前导零,您可以将整个表达式包装在 LTRIM(... , '0') 中,或者按照 Alex Poole 的建议,使用 fm 切换,如下所示:'fmhh:fmmi AM'

【讨论】:

  • 这不会给出 04:00 分钟四舍五入为零。然而 OP 并不清楚这是否是他们想要的
  • 对 - 我没有问,因为你已经问过了。她的输入样本有:00:00。
  • FM modifier 将抑制零; to_char(timestamp '2020-04-11 16:18:40', 'FMHH:MI AM')4:18 PM
  • @AlexPoole - 哦,太好了,我错过了(我确实看过,但在我看来,FM 的唯一用途与删除 BLANK 填充有关)。谢谢!
  • 另一方面,该掩码也会抑制分钟值中的前导零,因此 04:00 变为 4:0 PM,这是不太可取的......所以你需要 @987654326 @得到4:00 PM。 (“每次后续出现都会切换修饰符的效果”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2013-02-05
  • 2018-05-03
  • 2012-02-11
  • 2021-08-15
相关资源
最近更新 更多