使用period_name的日期范围

Date range using period_name

提问人:James Wilson 提问时间:11/17/2023 最后编辑:Barbaros ÖzhanJames Wilson 更新时间:11/17/2023 访问量:47

问:

我有一个表格,其中包含日期列,但采用字符串格式。gl_balancesperiod_namemmm-yy

我需要从某个时间段之间提取数据,因此所有数据都在 和 之间。gl_balances:period_name_from:period_name_to

我正在努力弄清楚如何做到这一点。

有表,其中有,和(月号)可能也很有帮助gl_periodsperiod_nameperiod_yearperiod_num

我希望在两个周期之间显示表中的所有数据。gl_balancesperiod_name

我尝试了很多东西,但我认为我把它弄得一团糟!

SQL Oracle 日期

评论

3赞 Himanshu Kandpal 11/17/2023
嗨,您是否可以给我们一些示例数据和表结构,您可以使用 TO_DATE 函数将字符串转换为日期并使用 BETWEEN 函数获取数据。techonthenet.com/oracle/between.php
1赞 Error_2646 11/17/2023
有多种方法可以做到这一点。选择 to_date('OCT-23','MON-YY') from dual .应该与 BETWEEN 函数一起是一个很好的起点。如果您需要边界以 BETWEEN 具有包容性的特定方式运行,请当心。
1赞 Thorsten Kettner 11/17/2023
您有一个周期表,但它不包含周期的开始和结束日期,这有点奇怪。您可能需要更改数据模型。顺便说一句,mmm-yy 中的 mmm 是什么意思?三个字母的月份缩写?如果是这样,哪种语言?

答:

0赞 MT0 11/17/2023 #1

我有一个表格gl_balances其中包含日期列,但采用字符串格式。period_namemmm-yy

我需要从某个时间段之间提取数据,因此所有数据都在 和 之间。gl_balances:period_name_from:period_name_to

假设您的绑定变量也是该格式的字符串,则将字符串转换为日期并使用:JAN-23BETWEEN

SELECT *
FROM   gl_balances
WHERE  TO_DATE(period_name, 'MON-RR') BETWEEN TO_DATE(:period_name_from, 'MON-RR')
                                          AND TO_DATE(:period_name_to, 'MON-RR');

如果绑定变量是日期,则:

SELECT *
FROM   gl_balances
WHERE  TO_DATE(period_name, 'MON-RR') BETWEEN :period_name_from
                                          AND :period_name_to;

或者,如果您希望绑定变量部分重叠的整个月份(注意:结束月份永远不会重叠,因为该月第一天的午夜):period_name_fromTO_DATE(period_name, 'MON-RR')

SELECT *
FROM   gl_balances
WHERE  TO_DATE(period_name, 'MON-RR') BETWEEN TRUNC(:period_name_from, 'MM')
                                          AND :period_name_to;