Metabase

DatetimeAdd

تابع datetimeAdd یک مقدار تاریخ/زمان می‌گیرد و تعدادی واحد زمانی به آن اضافه می‌کند.
این تابع برای کار با داده‌های سری زمانی که برای آن‌ها «زمان شروع» و «زمان پایان» دارید (مانند سشن‌ها یا اشتراک‌ها) بسیار مفید است.

SyntaxExample
datetimeAdd(column, amount, unit)datetimeAdd("2021-03-25", 1, "month")
یک مقدار تاریخ/زمان را گرفته و تعداد مشخصی واحد زمانی را به آن اضافه می‌کند.2021-04-25

پارامترها

پارامتر column می‌تواند یکی از موارد زیر باشد:

  • نام یک ستون Timestamp،
  • یک عبارت سفارشی که datetime برمی‌گرداند، یا
  • یک رشته با فرمت "YYYY-MM-DD" یا "YYYY-MM-DDTHH:MM:SS".

پارامتر unit می‌تواند یکی از این مقدارها باشد:

  • "year"
  • "quarter"
  • "month"
  • "day"
  • "hour"
  • "minute"
  • "second"
  • "millisecond"

پارامتر amount:

  • باید عدد صحیح باشد؛ مقادیر کسری (مثل ۰٫۵ سال) پشتیبانی نمی‌شوند.
  • می‌تواند منفی باشد؛ برای مثال datetimeAdd("2021-03-25", -1, "month") تاریخ 2021-02-25 را برمی‌گرداند.

محاسبهٔ زمان پایان

فرض کنید عاشق قهوه هستید و می‌خواهید تازگی (Freshness) دانه‌های قهوه را دنبال کنید:

CoffeeOpened OnFinish By
DAK Honey DudeOctober 31, 2022November 14, 2022
NO6 Full City EspressoNovember 7, 2022November 21, 2022
Ghost Roaster GiakanjaNovember 27, 2022December 11, 2022

در این جدول، ستون Finish By یک ستون سفارشی است با این عبارت:

datetimeAdd([Opened On], 14, "day")

بررسی این‌که تاریخ فعلی داخل یک بازه هست یا نه

فرض کنید می‌خواهید بررسی کنید «امروز» بین یک زمان شروع و زمان پایان قرار دارد یا نه.
در این مثال، فرض کنیم امروز ۱ دسامبر ۲۰۲۲ است.

CoffeeOpened OnFinish ByStill Fresh Today
DAK Honey DudeOctober 31, 2022November 14, 2022No
NO6 Full City EspressoNovember 7, 2022November 21, 2022No
Ghost Roaster GiakanjaNovember 27, 2022December 11, 2022Yes
  • ستون Finish By همان عبارتی را دارد که بالا دیدیم:
datetimeAdd([Opened On], 14, "day")
  • ستون Still Fresh Today با استفاده از تابع case بررسی می‌کند که آیا تاریخ فعلی (now) بین مقدارهای Opened On و Finish By قرار دارد یا نه:
case(between(now, [Opened On], [Finish By]), "Yes", "No")

انواع دادهٔ قابل قبول

نوع دادهسازگار با datetimeAdd
String
Number
Timestamp
Boolean
JSON

در این مستند، از «timestamp» و «datetime» برای اشاره به هر نوع دادهٔ زمانی پشتیبانی‌شده در متابیس استفاده می‌کنیم. برای جزئیات بیش‌تر، بخش مناطق زمانی را ببینید.

اگر Timestampها در دیتابیس شما به‌صورت رشته یا عدد ذخیره شده‌اند، یک ادمین می‌تواند روی صفحهٔ Table Metadata آن‌ها را به نوع Timestamp Cast کند.

محدودیت‌ها

اگر از MongoDB استفاده می‌کنید، datetimeAdd فقط روی نسخه‌های ۵ به بعد کار می‌کند.

توابع مرتبط

در این بخش توابع و فرمول‌هایی را می‌بینید که مانند عبارت datetimeAdd متابیس کار می‌کنند، همراه با نکاتی برای انتخاب بهترین گزینه.

عبارت‌های متابیس

ابزارهای دیگر

datetimeSubtract

دو تابع datetimeSubtract و datetimeAdd از نظر توانایی معادل هستند، چون می‌توانید برای amount مقدار منفی بدهید.
به‌طور کلی بهتر است از «دوبار منفی» (مثل کم‌کردن یک عدد منفی) پرهیز کنید.

datetimeSubtract([Opened On], -14, "day")

از نظر نتیجه معادل است با:

datetimeAdd([Opened On], 14, "day")

SQL

وقتی سؤالی را با Query builder اجرا می‌کنید، متابیس تنظیمات گرافیکی شما را به کوئری ترجمه کرده و روی دیتابیس اجرا می‌کند.

اگر دادهٔ نمونهٔ قهوه را در یک دیتابیس PostgreSQL ذخیره کرده باشید:

SELECT opened_on + INTERVAL '14 days' AS finish_by
FROM coffee

این کوئری معادل عبارت زیر در متابیس است:

datetimeAdd([Opened On], 14, "day")

Spreadsheets

اگر دادهٔ نمونهٔ قهوه در Spreadsheet باشد و ستون "Opened On" در ستون A با فرمت تاریخ ذخیره شده باشد، فرمول زیر:

A:A + 14

همان نتیجه‌ای را می‌دهد که:

datetimeAdd([Opened On], 14, "day")

در اکثر ابزارهای Spreadsheet برای واحدهای زمانی مختلف (روز، ماه، سال و…) باید از توابع متفاوتی استفاده کنید؛ datetimeAdd همهٔ آن‌ها را پشت یک سینتکس واحد پنهان می‌کند.

Python

اگر دادهٔ نمونهٔ قهوه را در یک DataFrame pandas به نام df ذخیره کرده باشید، می‌توانید با ماژول datetime و تابع timedelta این‌طور عمل کنید:

df['Finish By'] = df['Opened On'] + datetime.timedelta(days=14)

که معادل این عبارت در متابیس است:

datetimeAdd([Opened On], 14, "day")

مطالعهٔ بیشتر