مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۴ دقیقه·۲۰ روز پیش

CEIL و FLOOR در پایگاه داده Oracle 23ai


در پایگاه داده اوراکل ۲۳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>

<br/>ارتباط با ما

جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد


CEIL

تابع 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

تابع 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>

ارتباط با ما

جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد


اوراکلoracle database
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید