buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

Oracle常用sql---将字符串转换为时间--Oracle计算时间差函数

你敢相信这是个码农?

 

我发了一段mysql的select语句给ChatGPT,让它转换成Oracle的语法,它立马就返回了,所以,许多知识问题,OpenAI可以快速帮我解决。当然,AI有丰富的知识库,但如何使用这些知识,以及如何灵活运用这些知识,某些情况下还需要我们人脑。

将字符串转换为时间

TO_DATE 和 TO_TIMESTAMP 是用于将字符串转换为日期和时间戳类型的函数。它们之间的区别在于转换的结果类型和支持的精度。

  • TO_DATE 函数用于将字符串转换为日期类型。它接受两个参数:字符串和日期格式模式,然后返回一个日期类型的值。例如,TO_DATE('2023-09-20', 'YYYY-MM-DD') 将字符串 '2023-09-20' 转换为日期类型。
  • TO_TIMESTAMP 函数用于将字符串转换为时间戳类型。它也接受两个参数:字符串和时间戳格式模式,然后返回一个时间戳类型的值。时间戳类型包含日期和时间的信息。例如,TO_TIMESTAMP('2023-09-20 08:30:00', 'YYYY-MM-DD HH24:MI:SS') 将字符串 '2023-09-20 08:30:00' 转换为时间戳类型。


Oracle计算时间差函数

mysql中计算两个时间字段的差值可以用 TIMEDIFF 函数。

select bank_id, count(*) from T_BANK_ORDER where create_time>='2023-9-20' and TIMEDIFF(ORDER_END_TIME,create_time)>'00:06:30' and state=3
group by bank_id

在 Oracle SQL 中,没有直接的 `TIMEDIFF` 函数可以计算时间差。我们可以使用 `INTERVAL` 和日期运算符来执行时间差计算。以下是将上述 SQL 查询语句转换为 Oracle SQL 的写法:

```sql
SELECT bank_id, count(*)
FROM T_BANK_ORDER
WHERE create_time >= TO_DATE('2023-09-20', 'YYYY-MM-DD') AND (ORDER_END_TIME - create_time) > INTERVAL '6' MINUTE + INTERVAL '30' SECOND AND state = 3
GROUP BY bank_id;
```

posted on 2019-06-14 20:36  buguge  阅读(10358)  评论(0编辑  收藏  举报