همانطور که می دانید توابع CEIL و FLOOR برای round کردن(گرد کردن) اعداد استفاده می شوند به این صورت که تابع CEIL اعداد را به سمت بالا گرد می کند و تابع FLOOR هم برای گردن کردن به سمت پایین استفاده می شود.
SQL> select floor(6.45) from dual;
FLOOR(6.45)
-----------
6
SQL> select CEIL(6.45) from dual;
CEIL(6.45)
----------
7
از نسخه 23c می توان از توابع CEIL و FLOOR برای انواع داده DATE، TIMESTAMP و INTERVAL هم استفاده کرد. برای مثال می توانیم برای تاریخ 2024/02/05 ماه را به سمت بالا گرد کنیم که در این صورت این تاریخ به 2024/03/01 رند خواهد شد.
ممکن است نیاز باشد روز، سال، ساعت، دقیقه و … را رند کنیم که در این صورت باید در آرگومان دوم این توابع، فرمت مورد نظر را تعیین کنیم از طریق مقادیری چون MM، DD، HH24و …
مثالهای زیر برای نوع داده Date هستند:
SQL> SELECT CEIL(TO_DATE ('2024/02/05','YYYY/MM/DD'), 'MM') AS Month_CE,FLOOR(TO_DATE ('2024/02/05','YYYY/MM/DD'), 'MM') AS Month_FL;
MONTH_CE MONTH_FL
------------------- -------------------
2024/03/01 00:00:00 2024/02/01 00:00:00
SQL> SELECT CEIL(TO_DATE ('2024/02/05','YYYY/MM/DD'), 'YYYY') AS YEAR_CE,FLOOR(TO_DATE ('2024/02/05','YYYY/MM/DD'), 'YYYY') AS YEAR_FL;
YEAR_CE YEAR_FL
------------------- -------------------
2025/01/01 00:00:00 2024/01/01 00:00:00
مقدار پیش فرض برای آرگومان دوم، DD است:
SQL> SELECT CEIL(TO_DATE ('2024/02/05 08:05:15','YYYY/MM/DD HH24:MI:SS')) AS Default_CE,FLOOR(TO_DATE ('2024/02/05 08:05:15','YYYY/MM/DD HH24:MI:SS')) AS Default_FL;
DEFAULT_CE DEFAULT_FL
------------------- -------------------
2024/02/06 00:00:00 2024/02/05 00:00:00
در ادامه مثالهایی را برای INTERVAL مشاهده خواهید کرد:
SQL> SELECT FLOOR(to_dsinterval('3 18:47:32'), 'HH24') as interval_HH24_FL,CEIL(to_dsinterval('3 18:47:32'), 'HH24') as interval_HH24_CE;
INTERVAL_HH24_FL INTERVAL_HH24_CE
------------------------------- -------------------------------
+000000003 18:00:00.000000000 +000000003 19:00:00.000000000
SQL> SELECT FLOOR(to_dsinterval('3 18:47:32'), 'DD') as interval_DD_FL,CEIL(to_dsinterval('3 18:47:32'), 'DD') as interval_DD_CE;
INTERVAL_DD_FL INTERVAL_DD_CE
------------------------------- -------------------------------
+000000003 00:00:00.000000000 +000000004 00:00:00.000000000
SQL> SELECT FLOOR(INTERVAL '+99-11' YEAR(2) TO MONTH, 'YEAR') as YEAR_FL; YEAR_FL ---------------------------------- +000000099-00