در پایگاه داده اوراکل ۲۳ai توابع CEIL و FLOOR از انواع داده های DATE، TIMESTAMP و INTERVAL پشتیبانی می کنند. در نسخههای قبلی، توابع CEIL و FLOOR فقط اعداد را میپذیرفتند و به ما این امکان را میدادند که به ترتیب به نزدیکترین مقدار صحیح به بالا یا پایین گرد کنیم.
نمونه های این مقاله از جدول زیر استفاده می کنند.
drop table if exists t1 purge;
create table t1 (
id number,
number_col number,
date_col date,
timestamp_col timestamp,
interval_col interval day to second
);
insert into t1 (id, number_col, date_col, timestamp_col, interval_col) values
(۱, ۱٫۳, to_date(‘2023-05-01 08:15′,’yyyy-mm-dd hh24:mi’), timestamp ‘2023-05-01 08:15:00.0’, to_dsinterval(‘0 08:15:00’)),
(۲, ۱٫۶, to_date(‘2023-05-01 13:45′,’yyyy-mm-dd hh24:mi’), timestamp ‘2023-05-01 13:45:00.0’, to_dsinterval(‘0 13:45:00’));
commit;
داده ها را در جدول نمایش می دهیم. این نشان دهنده نقطه شروع ما است.
alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;
alter session set nls_timestamp_format=’yyyy-mm-dd hh24:mi:ss’;
set linesize 100
column date_col format a20
column timestamp_col format a20
column interval_col format a30
select * from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱٫۳ ۲۰۲۳-۰۵-۰۱ ۰۸:۱۵:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۸:۱۵:۰۰ +۰۰ ۰۸:۱۵:۰۰٫۰۰۰۰۰۰
۲ ۱٫۶ ۲۰۲۳-۰۵-۰۱ ۱۳:۴۵:۰۰ ۲۰۲۳-۰۵-۰۱ ۱۳:۴۵:۰۰ +۰۰ ۱۳:۴۵:۰۰٫۰۰۰۰۰۰
SQL>
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد
تابع CEIL مقادیر DATE، TIMESTAMP و INTERVAL را گرد می کند. این شبیه به استفاده از تابع ROUND است، اما تابع CEIL همیشه جمع می شود. پارامتر فرمت به طور پیشفرض روی «DD» است، بنابراین بدون پارامتر قالب، به روز بعد گرد میکنیم.
select id,
ceil(number_col) as number_col,
ceil(date_col) as date_col,
ceil(timestamp_col) as timestamp_col,
ceil(interval_col) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۲ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۱ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۲ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۱ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
اگر این را با تابع ROUND مقایسه کنیم، می بینیم که بسته به مقدار، ممکن است به سمت بالا یا پایین گرد شود.
select id,
round(number_col) as number_col,
round(date_col) as date_col,
round(timestamp_col) as timestamp_col,
round(interval_col) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۲ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۲ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۱ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
پارامتر فرمت سطح گرد شدن را تعیین می کند. در مثال زیر از “HH24” برای جمع کردن ساعت بعدی استفاده می کنیم.
select id,
ceil(number_col) as number_col,
ceil(date_col, ‘hh24’) as date_col,
ceil(timestamp_col, ‘hh24’) as timestamp_col,
ceil(interval_col, ‘hh24’) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۲ ۲۰۲۳-۰۵-۰۱ ۰۹:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۹:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۹:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۲ ۲۰۲۳-۰۵-۰۱ ۱۴:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۱۴:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۱۴:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
پس از افزایش، اگر این را با تابع ROUND مقایسه کنیم، می بینیم که بسته به مقدار، ممکن است به بالا یا پایین گرد شود.
select id,
round(number_col) as number_col,
round(date_col, ‘hh24’) as date_col,
round(timestamp_col, ‘hh24’) as timestamp_col,
round(interval_col, ‘hh24’) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۲ ۲۰۲۳-۰۵-۰۱ ۱۴:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۱۴:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۱۴:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
تابع FLOOR مقادیر DATE، TIMESTAMP و INTERVAL را پایین می آورد. این شبیه به استفاده از تابع TRUNC با پارامتر قالب است. پارامتر فرمت پیشفرض روی «DD» است، بنابراین بدون پارامتر قالب، به ابتدای روز گرد میکنیم.
select id,
floor(number_col) as number_col,
floor(date_col) as date_col,
floor(timestamp_col) as timestamp_col,
floor(interval_col) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۱ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
در اینجا ما معادل را با استفاده از تابع TRUNC می بینیم.
select id,
trunc(number_col) as number_col,
trunc(date_col) as date_col,
trunc(timestamp_col) as timestamp_col,
trunc(interval_col) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۱ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۰:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۰:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
پارامتر فرمت سطح گرد شدن را تعیین می کند. در مثال زیر از «HH24» برای گرد کردن به ساعت قبل استفاده میکنیم.
select id,
floor(number_col) as number_col,
floor(date_col, ‘hh24’) as date_col,
floor(timestamp_col, ‘hh24’) as timestamp_col,
floor(interval_col, ‘hh24’) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۱ ۲۰۲۳-۰۵-۰۱ ۱۳:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۱۳:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۱۳:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
در اینجا ما معادل را با استفاده از تابع TRUNC می بینیم.
select id,
trunc(number_col) as number_col,
trunc(date_col, ‘hh24’) as date_col,
trunc(timestamp_col, ‘hh24’) as timestamp_col,
trunc(interval_col, ‘hh24’) as interval_col
from t1;
ID NUMBER_COL DATE_COL TIMESTAMP_COL INTERVAL_COL
———- ———- ——————– ——————– ——————————
۱ ۱ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۰۸:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۰۸:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
۲ ۱ ۲۰۲۳-۰۵-۰۱ ۱۳:۰۰:۰۰ ۲۰۲۳-۰۵-۰۱ ۱۳:۰۰:۰۰ +۰۰۰۰۰۰۰۰۰ ۱۳:۰۰:۰۰٫۰۰۰۰۰۰۰۰۰
SQL>
جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد