نحوه کار با تاریخ و زمان در SQL

مقدمه

هنگام کار با پایگاه های داده رابطه ای و زبان پرس و جو ساختاریافته (SQL)، ممکن است زمان هایی وجود داشته باشد که شما نیاز به کار با مقادیری داشته باشید که تاریخ یا زمان های خاصی را نشان می دهند. به عنوان مثال، ممکن است لازم باشد کل ساعات صرف شده برای یک فعالیت خاص را محاسبه کنید، یا شاید لازم باشد مقادیر تاریخ یا زمان را با استفاده از عملگرهای ریاضی و توابع جمع آوری کنید تا مجموع یا میانگین آنها را محاسبه کنید.

در این آموزش نحوه استفاده از تاریخ و زمان در SQL را خواهید آموخت. شما با انجام محاسبات و استفاده از توابع مختلف با تاریخ و زمان فقط با استفاده از عبارت SELECT شروع می کنید. سپس با اجرای پرس‌و‌جوها بر روی داده‌های نمونه تمرین می‌کنید و یاد می‌گیرید که چگونه تابع CAST را پیاده‌سازی کنید تا خروجی برای خواندن قابل هضم‌تر شود.

پیش نیازها

برای تکمیل این آموزش، شما نیاز دارید:

  • سروری که اوبونتو 20.04 را اجرا می کند، با یک کاربر غیر ریشه با امتیازات مدیریت sudo و فایروال فعال است.
  • MySQL روی سرور نصب و ایمن شده است.

توجه: لطفاً توجه داشته باشید که بسیاری از سیستم های مدیریت پایگاه داده رابطه ای از پیاده سازی های منحصر به فرد خود از SQL استفاده می کنند. اگرچه دستورات ذکر شده در این آموزش بر روی اکثر RDBMS ها کار می کنند، اگر آنها را در سیستمی غیر از MySQL آزمایش کنید، سینتکس یا خروجی دقیق ممکن است متفاوت باشد.

برای تمرین استفاده از تاریخ و زمان در این آموزش، به یک پایگاه داده و جدول بارگذاری شده با داده های نمونه نیاز دارید. اگر یک مورد آماده برای درج ندارید، می‌توانید بخش اتصال به MySQL و راه‌اندازی نمونه پایگاه داده را بخوانید تا نحوه ایجاد پایگاه داده و جدول را بیاموزید. این آموزش به این پایگاه داده و جدول نمونه در سراسر آن اشاره خواهد کرد.

اتصال به MySQL و راه اندازی یک پایگاه داده نمونه

اگر پایگاه داده SQL شما بر روی یک سرور راه دور اجرا می شود، SSH را از دستگاه محلی خود به سرور خود وارد کنید:

ssh sammy@your_server_ip

سپس، اعلان MySQL را باز کنید و سامی را با اطلاعات حساب کاربری MySQL خود جایگزین کنید:

mysql -u sammy -p

یک پایگاه داده به نام datetimeDB ایجاد کنید:

CREATE DATABASE datetimeDB;

اگر پایگاه داده با موفقیت ایجاد شود، خروجی زیر را دریافت خواهید کرد:

Output
Query OK, 1 row affected (0.01 sec)

برای انتخاب پایگاه داده datetimeDB عبارت USE زیر را اجرا کنید:

USE datetimeDB;
Output
Database changed

پس از انتخاب پایگاه داده، یک جدول درون آن ایجاد کنید. برای مثال این آموزش، جدولی ایجاد می‌کنیم که نتایج دو دونده را برای مسابقات مختلفی که در طول یک سال انجام داده‌اند را در خود نگه می‌دارد. این جدول دارای هفت ستون زیر است:

  • race_id: مقادیر نوع داده int را نمایش می دهد و به عنوان کلید اصلی جدول عمل می کند، به این معنی که هر مقدار در این ستون به عنوان یک شناسه منحصر به فرد برای ردیف مربوطه عمل می کند.
  • runner_name: از نوع داده varchar با حداکثر 30 کاراکتر برای نام دو مسابقه دهنده Bolt و Felix استفاده می کند.
  • race_name: انواع نژادها با نوع داده varchar را حداکثر تا 20 کاراکتر نگه می دارد.
  • start_day: از نوع داده DATE برای ردیابی تاریخ یک مسابقه خاص بر اساس سال، ماه و روز استفاده می کند. این نوع داده به پارامترهای زیر پایبند است: چهار رقم برای سال، و حداکثر دو رقم برای ماه و روز (YYYY-MM-DD).
  • start_time: نشان دهنده زمان شروع مسابقه با نوع داده TIME بر حسب ساعت، دقیقه و ثانیه (HH:MM:SS) است. این نوع داده از فرمت ساعت 24 ساعته پیروی می کند، مانند ساعت 15:00 برای معادل 3:00 بعد از ظهر.
  • total_miles: کل مسافت پیموده شده برای هر مسابقه را با استفاده از نوع داده اعشاری نشان می دهد زیرا بسیاری از کل مایل ها در هر مسابقه اعداد کامل نیستند. در این مورد، اعشار دقت سه را با مقیاس یک مشخص می‌کند، به این معنی که هر مقدار در این ستون می‌تواند سه رقمی داشته باشد که یکی از آن ارقام در سمت راست نقطه اعشار باشد.
  • end_time: از نوع داده TIMESTAMP برای پیگیری زمان دوندگان در پایان مسابقه استفاده می کند. این نوع داده تاریخ و زمان را در یک رشته ترکیب می کند و قالب آن ترکیبی از موارد DATE و TIME است: (YYYY-MM-DD HH:MM:SS).

با اجرای دستور CREATE TABLE جدول را ایجاد کنید:

CREATE TABLE race_results (
race_id int, 
runner_name varchar(30),
race_name varchar(20), 
start_day DATE,
start_time TIME, 
total_miles decimal(3, 1),
end_time TIMESTAMP,
PRIMARY KEY (race_id)
); 

سپس تعدادی داده نمونه را در جدول خالی وارد کنید:

INSERT INTO race_results
(race_id, runner_name, race_name, start_day, start_time, total_miles, end_time)
VALUES
(1, 'bolt', '1600_meters', '2022-09-18', '7:00:00', 1.0, '2022-09-18 7:06:30'),
(2, 'bolt', '5K', '2022-10-19', '11:00:00', 3.1, '2022-10-19 11:22:31'),
(3, 'bolt', '10K', '2022-11-20', '10:00:00', 6.2, '2022-11-20 10:38:05'),
(4, 'bolt', 'half_marathon', '2022-12-21', '6:00:00', 13.1, '2022-12-21 07:39:04'),
(5, 'bolt', 'full_marathon', '2023-01-22', '8:00:00', 26.2, '2023-01-22 11:23:10'),
(6, 'felix', '1600_meters', '2022-09-18', '7:00:00', 1.0, '2022-09-18 7:07:15'),
(7, 'felix', '5K', '2022-10-19', '11:00:00', 3.1, '2022-10-19 11:30:50'),
(8, 'felix', '10K', '2022-11-20', '10:00:00', 6.2, '2022-11-20 11:10:17'),
(9, 'felix', 'half_marathon', '2022-12-21', '6:00:00', 13.1, '2022-12-21 08:11:57'),
(10, 'felix', 'full_marathon', '2023-01-22', '8:00:00', 26.2, '2023-01-22 12:02:10');
Output
Query OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0

هنگامی که داده ها را وارد کردید، آماده شروع تمرین حسابی و توابع با تاریخ و زمان در SQL هستید.

استفاده از حساب با تاریخ و زمان

در SQL می توانید مقادیر تاریخ و زمان را با استفاده از عبارات ریاضی دستکاری کنید. تنها چیزی که مورد نیاز است عملگر ریاضی و مقادیری است که می خواهید محاسبه کنید.

به عنوان مثال، فرض کنید می‌خواهید یک تاریخ را پیدا کنید که تعداد روزهای مشخصی پس از دیگری باشد. پرس و جوی زیر یک مقدار تاریخ (2022-10-05) می گیرد و 17 را به آن اضافه می کند تا مقدار تاریخ هفده روز پس از تاریخ مشخص شده در پرس و جو را برگرداند. توجه داشته باشید که این مثال 2022-10-05 را به عنوان مقدار DATE مشخص می کند تا اطمینان حاصل شود که DBMS آن را به عنوان رشته یا نوع دیگری از داده تفسیر نمی کند:

SELECT DATE '2022-10-05' + 17 AS new_date;
Output
+----------+
| new_date |
+----------+
| 20221022 |
+----------+
1 row in set (0.01 sec)

همانطور که این خروجی نشان می دهد، 17 روز پس از 2022-10-05، 2022-10-22 یا 22 اکتبر 2022 است.

به عنوان مثال دیگر، فرض کنید می خواهید کل ساعت ها را بین دو زمان مختلف محاسبه کنید. می توانید این کار را با کم کردن دو بار از یکدیگر انجام دهید. برای پرسش زیر، 11:00 اولین مقدار زمانی و 3:00 مقدار زمانی دوم است. در اینجا باید مشخص کنید که هر دو مقدار TIME هستند تا اختلاف ساعت را برگردانید:

SELECT TIME '11:00' - TIME '3:00' AS time_diff;
Output
+-----------+
| time_diff |
+-----------+
| 80000 |
+-----------+
1 row in set (0.00 sec)

این خروجی به شما می گوید که تفاوت بین 11:00 و 3:00 80000 یا 8 ساعت است.

حالا با استفاده از محاسبات روی اطلاعات تاریخ و زمان از داده های نمونه تمرین کنید. برای اولین پرس و جو، کل زمانی را که دوندگان برای به پایان رساندن هر مسابقه صرف کردند، با کم کردن end_time از start_time محاسبه کنید:

SELECT runner_name, race_name, end_time - start_time 
AS total_time 
FROM race_results;
Output
+-------------+---------------+----------------+
| runner_name | race_name | total_time |
+-------------+---------------+----------------+
| bolt | 1600_meters | 20220918000630 |
| bolt | 5K | 20221019002231 |
| bolt | 10K | 20221120003805 |
| bolt | half_marathon | 20221221013904 |
| bolt | full_marathon | 20230122032310 |
| felix | 1600_meters | 20220918000715 |
| felix | 5K | 20221019003050 |
| felix | 10K | 20221120011017 |
| felix | half_marathon | 20221221021157 |
| felix | full_marathon | 20230122040210 |
+-------------+---------------+----------------+
10 rows in set (0.00 sec)

متوجه خواهید شد که این خروجی در ستون total_time نسبتا طولانی است و خواندن آن دشوار است. در ادامه، نحوه استفاده از تابع CAST را برای تبدیل این مقادیر داده به طوری که برای خواندن واضح‌تر باشد، نشان خواهیم داد.

اکنون، اگر فقط به عملکرد هر دونده برای مسابقات طولانی تر، مانند دو ماراتن نیمه و کامل علاقه مند بودید، می توانید اطلاعات خود را برای بازیابی آن اطلاعات جستجو کنید. برای این پرس و جو، end_time را از start_time کم کنید، و نتایج خود را با استفاده از عبارت WHERE برای بازیابی داده هایی که total_miles بیشتر از 12 بود، محدود کنید:

SELECT runner_name, race_name, end_time - start_time AS half_full_results
FROM race_results 
WHERE total_miles > 12;
Output
+-------------+---------------+-------------------+
| runner_name | race_name | half_full_results |
+-------------+---------------+-------------------+
| bolt | half_marathon | 20221221013904 |
| bolt | full_marathon | 20230122032310 |
| felix | half_marathon | 20221221021157 |
| felix | full_marathon | 20230122040210 |
+-------------+---------------+-------------------+
4 rows in set (0.00 sec)

در این بخش، مقداری حساب در تاریخ و زمان با دستور SELECT و برای اهداف عملی روی داده های نمونه انجام دادید. در مرحله بعد، پرس و جوها را با استفاده از توابع مختلف تاریخ و زمان تمرین خواهید کرد.

استفاده از توابع تاریخ و زمان و عبارات بازه

چندین توابع وجود دارد که می توان از آنها برای یافتن و دستکاری مقادیر تاریخ و زمان در SQL استفاده کرد. توابع SQL معمولاً برای پردازش یا دستکاری داده ها استفاده می شوند و توابع موجود به پیاده سازی SQL بستگی دارند. با این حال، اکثر پیاده‌سازی‌های SQL به شما امکان می‌دهند تا تاریخ و زمان فعلی را با پرس و جو برای مقادیر current_date و current_time پیدا کنید.

برای پیدا کردن تاریخ امروز، به عنوان مثال، نحو کوتاه است و فقط از عبارت SELECT و تابع current_date مانند زیر تشکیل شده است:

SELECT current_date;
Output
+--------------+
| current_date |
+--------------+
| 2022-02-15 |
+--------------+
1 row in set (0.00 sec)

با استفاده از همان نحو، می توانید زمان فعلی را با تابع current_time پیدا کنید:

SELECT current_time;
Output
+--------------+
| current_time |
+--------------+
| 17:10:20 |
+--------------+
1 row in set (0.00 sec)

اگر ترجیح می دهید تاریخ و زمان را در خروجی پرس و جو کنید، از تابع current_timestamp استفاده کنید:

SELECT current_timestamp;
Output
+---------------------+
| current_timestamp |
+---------------------+
| 2022-02-15 19:09:58 |
+---------------------+
1 row in set (0.00 sec)

شما می توانید از توابع تاریخ و زمان مانند اینها در توابع حسابی مشابه بخش قبل استفاده کنید. به عنوان مثال، بگویید می خواهید بدانید تاریخ 11 روز پیش از تاریخ امروز چه بوده است. در این مورد، می‌توانید از همان ساختار نحوی استفاده کنید که قبلاً برای پرس‌وجویی از تابع current_date استفاده می‌کردید و سپس 11 را از آن کم کنید تا تاریخ یازده روز قبل را بیابید:

SELECT current_date - 11;
Output
+-------------------+
| current_date - 11 |
+-------------------+
| 20220206 |
+-------------------+
1 row in set (0.01 sec)

همانطور که این خروجی نشان می دهد، 11 روز پیش از current_date (در زمان نگارش این مقاله) 2022-02-06 یا 6 فوریه 2022 بود. اکنون همین عملیات را امتحان کنید، اما current_date را با تابع current_time جایگزین کنید:

SELECT current_time - 11;
Output
+-------------------+
| current_time - 11 |
+-------------------+
| 233639 |
+-------------------+
1 row in set (0.00 sec)

این خروجی نشان می دهد که وقتی 11 را از مقدار current_time کم کنید، 11 ثانیه کم می کند. عملیاتی که قبلاً با استفاده از تابع current_date اجرا کردید، 11 را به عنوان روز تفسیر کرد، نه ثانیه. این ناهماهنگی در نحوه تفسیر اعداد هنگام کار با توابع تاریخ و زمان می تواند گیج کننده باشد. به جای اینکه از شما بخواهند مقادیر تاریخ و زمان را با استفاده از محاسباتی مانند این دستکاری کنید، بسیاری از سیستم های مدیریت پایگاه داده به شما اجازه می دهند از طریق استفاده از عبارات INTERVAL واضح تر باشید.

عبارات INTERVAL به شما این امکان را می دهد که تاریخ یا ساعت را قبل یا بعد از یک فاصله زمانی تعیین شده از یک بیان تاریخ یا زمانی مشخص کنید. آنها باید شکل زیر را داشته باشند:

INTERVAL value unit

به عنوان مثال، برای پیدا کردن تاریخ پنج روز بعد، می توانید پرس و جو زیر را اجرا کنید:

SELECT current_date + INTERVAL '5' DAY AS "5_days_from_today";

این مثال مقدار current_date را پیدا می کند و سپس عبارت بازه ای INTERVAL ‘5’ DAY را به آن اضافه می کند. این تاریخ 5 روز بعد را برمی گرداند:

Output
+-------------------+
| 5_days_from_today |
+-------------------+
| 2022-03-06 |
+-------------------+
1 row in set (0.00 sec)

این بسیار کمتر از پرس و جوی زیر مبهم است، که خروجی مشابه، البته نه یکسان تولید می کند:

SELECT current_date + 5 AS "5_days_from_today";
Output
+-------------------+
| 5_days_from_today |
+-------------------+
| 20220306 |
+-------------------+
1 row in set (0.00 sec)

توجه داشته باشید که می توانید فواصل زمانی را از تاریخ ها یا زمان ها کم کنید تا مقادیر قبل از مقدار تاریخ مشخص شده را بیابید:

SELECT current_date - INTERVAL '7' MONTH AS "7_months_ago";
Output
+--------------+
| 7_months_ago |
+--------------+
| 2021-08-01 |
+--------------+
1 row in set (0.00 sec)

اینکه چه واحدهایی برای استفاده در عبارات INTERVAL در دسترس هستند به انتخاب شما از DBMS بستگی دارد، اگرچه اکثر آنها گزینه هایی مانند HOUR، MINUTE و SECOND را خواهند داشت:

SELECT current_time + INTERVAL '6' HOUR AS "6_hours_from_now",
current_time - INTERVAL '5' MINUTE AS "5_minutes_ago",
current_time + INTERVAL '20' SECOND AS "20_seconds_from_now";
Output
+------------------+---------------+---------------------+
| 6_hours_from_now | 5_minutes_ago | 20_seconds_from_now |
+------------------+---------------+---------------------+
| 07:51:43 | 01:46:43 | 01:52:03.000000 |
+------------------+---------------+---------------------+
1 row in set (0.00 sec)

اکنون که در مورد عبارات بازه ای و برخی از توابع تاریخ و زمان یاد گرفته اید، به تمرین کار با داده های نمونه ای که در مرحله اول وارد کرده اید ادامه دهید.

استفاده از توابع CAST و Aggregate با تاریخ و زمان

مثال سوم در بخش Using Arithmetic with Dates and Times را به یاد بیاورید، زمانی که پرس و جوی زیر را برای تفریق end_time از start_time انجام دادید تا کل ساعاتی را که هر دونده در هر مسابقه انجام داده است محاسبه کنید. با این حال، خروجی منجر به ستونی شد که حاوی یک خروجی بسیار طولانی است که از نوع داده TIMESTAMP که در جدول تنظیم شده است پیروی می کند:

SELECT runner_name, race_name, end_time - start_time 
AS total_time 
FROM race_results;
Output
+-------------+---------------+----------------+
| runner_name | race_name | total_time |
+-------------+---------------+----------------+
| bolt | 1600_meters | 20220918000630 |
| bolt | 5K | 20221019002231 |
| bolt | 10K | 20221120003805 |
| bolt | half_marathon | 20221221013904 |
| bolt | full_marathon | 20230122032310 |
| felix | 1600_meters | 20220918000715 |
| felix | 5K | 20221019003050 |
| felix | 10K | 20221120011017 |
| felix | half_marathon | 20221221021157 |
| felix | full_marathon | 20230122040210 |
+-------------+---------------+----------------+
10 rows in set (0.00 sec)

از آنجایی که شما در حال انجام عملیاتی با دو ستون هستید که انواع داده‌های متفاوتی دارند (end_time دارای مقادیر TIMESTAMP و start_time نگهداری مقادیر TIME)، پایگاه داده نمی‌داند هنگام چاپ نتیجه عملیات از چه نوع داده‌ای استفاده کند. در عوض، هر دو مقدار را به اعداد صحیح تبدیل می کند تا بتواند عملیات را انجام دهد و در نتیجه اعداد طولانی در ستون total_time ایجاد می شود.

برای کمک به شفاف‌تر کردن این داده‌ها برای خواندن و تفسیر، می‌توانید از تابع CAST برای تبدیل این مقادیر صحیح طولانی به نوع داده TIME استفاده کنید. برای انجام این کار، با CAST شروع کنید و سپس بلافاصله آن را با یک پرانتز باز، مقادیری که می‌خواهید تبدیل شوند، و سپس کلمه کلیدی AS و نوع داده‌ای که می‌خواهید آن را به آن تبدیل کنید، دنبال کنید.

کوئری زیر با مثال قبلی یکسان است، اما از یک تابع CAST برای تبدیل ستون total_time به نوع داده زمان استفاده می کند:

SELECT runner_name, race_name, CAST(end_time - start_time AS time)
AS total_time 
FROM race_results;
Output
+-------------+---------------+------------+
| runner_name | race_name | total_time |
+-------------+---------------+------------+
| bolt | 1600_meters | 00:06:30 |
| bolt | 5K | 00:22:31 |
| bolt | 10K | 00:38:05 |
| bolt | half_marathon | 01:39:04 |
| bolt | full_marathon | 03:23:10 |
| felix | 1600_meters | 00:07:15 |
| felix | 5K | 00:30:50 |
| felix | 10K | 01:10:17 |
| felix | half_marathon | 02:11:57 |
| felix | full_marathon | 04:02:10 |
+-------------+---------------+------------+
10 rows in set (0.00 sec)

CAST مقادیر داده را در این خروجی به TIME تبدیل کرد و خواندن و درک آن را بسیار قابل هضم کرد.

حال، بیایید از چند تابع جمع در ترکیب با تابع CAST برای یافتن کوتاه‌ترین، طولانی‌ترین و کل زمان نتایج هر دونده استفاده کنیم. ابتدا، حداقل (یا کوتاه ترین) زمان صرف شده با تابع MIN را جستجو کنید. دوباره، می‌خواهید از CAST برای تبدیل مقادیر داده TIMESTAMP به مقادیر داده TIME برای وضوح استفاده کنید. لطفاً توجه داشته باشید که هنگام استفاده از دو تابع مانند این مثال، دو جفت پرانتز مورد نیاز است و محاسبه کل ساعت ها (پایان_زمان – زمان_شروع) باید در یکی از آنها قرار گیرد. در نهایت، یک بند GROUP BY اضافه کنید تا این مقادیر را بر اساس ستون runner_name سازماندهی کنید تا خروجی نتایج مسابقه دونده را نشان دهد:

SELECT runner_name, MIN(CAST(end_time - start_time AS time)) AS min_time
FROM race_results GROUP BY runner_name;
Output
+-------------+----------+
| runner_name | min_time |
+-------------+----------+
| bolt | 00:06:30 |
| felix | 00:07:15 |
+-------------+----------+
2 rows in set (0.00 sec)

این خروجی کوتاه ترین زمان دونده را نشان می دهد، در این مورد حداقل شش دقیقه و 30 ثانیه برای Bolt و هفت دقیقه و 15 ثانیه برای Felix.

در مرحله بعد، طولانی ترین زمان اجرای هر دونده را پیدا کنید. می‌توانید از همان نحوی که عبارت قبلی استفاده کنید، اما این بار MIN را با MAX جایگزین کنید:

SELECT runner_name, MAX(CAST(end_time - start_time AS time)) AS max_time
FROM race_results GROUP BY runner_name;
Output
+-------------+----------+
| runner_name | max_time |
+-------------+----------+
| bolt | 03:23:10 |
| felix | 04:02:10 |
+-------------+----------+
2 rows in set (0.00 sec)

این خروجی به ما می گوید که طولانی ترین زمان اجرای بولت در مجموع سه ساعت، 23 دقیقه و 10 ثانیه بوده است. و فلیکس در مجموع چهار ساعت و دو دقیقه و 10 ثانیه بود.

اکنون بیایید اطلاعات سطح بالا در مورد کل ساعت‌هایی که هر دونده صرف دویدن کرده است، جویا شویم. برای این پرس و جو، تابع جمع SUM را ترکیب کنید تا مجموع کل ساعت ها را بر اساس end_time – start_time بیابید و از CAST برای تبدیل آن مقادیر داده به TIME استفاده کنید. فراموش نکنید که GROUP BY را برای سازماندهی مقادیر نتایج هر دونده اضافه کنید:

SELECT runner_name, SUM(CAST(end_time - start_time AS time))
AS total_hours FROM race_results GROUP BY runner_name;
Output
+-------------+-------------+
| runner_name | total_hours |
+-------------+-------------+
| bolt | 52880 |
| felix | 76149 |
+-------------+-------------+
2 rows in set (0.00 sec)

جالب اینجاست که این خروجی تفسیر MySQL را نشان می دهد که در واقع کل زمان را به صورت اعداد صحیح محاسبه می کند. اگر این نتایج را به عنوان زمان بخوانیم، کل زمان بولت به پنج ساعت، 28 دقیقه و 80 ثانیه تقسیم می شود. و زمان فلیکس به هفت ساعت و 61 دقیقه و 49 ثانیه تقسیم می شود. همانطور که می توانید بگویید، این تفکیک زمان منطقی نیست، که نشان می دهد به عنوان یک عدد صحیح محاسبه می شود و نه زمان. برای مثال، اگر این را در یک DBMS متفاوت، مانند PostgreSQL امتحان کنید، همان پرس و جو کمی متفاوت به نظر می رسد:

SELECT runner_name, SUM(CAST(end_time - start_time AS time))
AS total_hours FROM race_results GROUP BY runner_name;
Output
runner_name | total_hours
-------------+-------------
felix | 10:01:44
bolt | 06:09:20
(2 rows)

در این مورد، پرس و جو در PostgreSQL مقادیر را به عنوان زمان تفسیر می کند و آنها را به این صورت محاسبه می کند، به طوری که نتایج فلیکس در مجموع به 10 ساعت، یک دقیقه و 44 ثانیه تجزیه می شود. و بولت شش ساعت و نه دقیقه و 20 ثانیه است. این مثالی است از اینکه چگونه پیاده‌سازی‌های مختلف DBMS ممکن است مقادیر داده‌ها را متفاوت تفسیر کنند، حتی اگر از یک پرس و جو و مجموعه داده استفاده کنند.

نتیجه

درک نحوه استفاده از تاریخ و زمان در SQL هنگام جستجو برای نتایج خاص مانند دقیقه، ثانیه، ساعت، روز، ماه، سال مفید است. یا ترکیبی از همه آنها علاوه بر این، توابع زیادی برای تاریخ ها و زمان ها وجود دارد که یافتن مقادیر خاص مانند تاریخ یا زمان فعلی را آسان تر می کند. در حالی که این آموزش فقط از محاسبات جمع و تفریق در تاریخ ها و زمان ها در SQL استفاده می کند، می توانید از مقادیر تاریخ و زمان با هر عبارت ریاضی استفاده کنید. از راهنمای ما در مورد عبارات ریاضی و توابع جمع بیشتر بیاموزید و آنها را با جستجوهای تاریخ و زمان خود امتحان کنید.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید