همانطور که می دانید توابع 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