توابع Transact-SQL. SQL - توابع تاریخ توابع کار با تاریخ در sql

دریافت تاریخ و زمان فعلی

برای دریافت تاریخ جاری (بدون زمان) در قالب YYYY-MM-DD، می توانید از توابع استفاده کنید:

  • CURDATE()
  • CURRENT_DATE()

برای به دست آوردن زمان فعلی (بدون تاریخ) در قالب HH:MM:SS، می توانید از توابع استفاده کنید:

  • CURTIME()
  • CURRENT_TIME()

برای به دست آوردن تاریخ و زمان فعلی در قالب YYYY-MM-DD HH:MM:SS، می توانید از یکی از عملکردهای زیر استفاده کنید:

  • اکنون ()
  • SYSDATE()
  • CURRENT_TIMESTAMP

مثال 1

SELECT CURDATE(); یا SELECT CURRENT_DATE();

نتیجه: 2016-08-28

SELECT CURTIME(); یا SELECT CURENT_TIME();

نتیجه: 19:29:54

اکنون انتخاب کنید(); یا SELECT SYSDATE(); یا SELECT CURRENT_TIMESTAMP؛

نتیجه: 2016-08-28 19:29:54

جمع و تفریق فاصله زمانی

اغلب باید با تاریخ و زمان سر و کار داشته باشید عملیات حسابی: یک بازه زمانی معین را به یک تاریخ معین اضافه یا کم کنید. افزودن فاصله زمانی به سه روش انجام می شود:

  • تابع DATE_ADD (تاریخ_اصلی، نوع عبارت INTERVAL);
  • تابع ADDDATE(تاریخ_اصلی، نوع عبارت INTERVAL);
  • عبارت: source_date + نوع عبارت INTERVAL.

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

  • تابع DATE_SUB (منبع_تاریخ، نوع بیان INTERVAL)؛
  • تابع SUBDATE (منبع_تاریخ، نوع بیان INTERVAL)؛
  • بیان: source_date - نوع بیان INTERVAL.

منبع_تاریختاریخی است که فاصله زمانی معینی به آن اضافه یا کم می شود. بیان- این خود بازه زمانی اضافه یا کم شده است که در قالب متن مشخص شده است. تایپ کنید- یک آرگومان که نوع فاصله ای که باید اضافه شود را نشان می دهد. این گزینه نحوه تفسیر صحیح عبارت را مشخص می کند. برای مثال، عبارت '3:24' را می توان به صورت 3 ساعت و 24 دقیقه یا 3 دقیقه و 24 ثانیه تفسیر کرد. اگر نوع "MINUTE_SECOND" مشخص شده باشد، تفسیر بدون ابهام خواهد بود. رابطه بین آرگومان های عبارت و نوع در جدول نشان داده شده است:

مثال 2

سه دستور بعدی همین عمل را انجام می دهند. آنها یک ثانیه به زمان داده شده اضافه می کنند.

"2016-09-10 23:59:59" + فاصله 1 SECOND را انتخاب کنید.

SELECT ADDDATE("2016-09-10 23:59:59", Interval 1 SECOND);

SELECT DATE_ADD("2016-09-10 23:59:59"، فاصله 1 SECOND);

نتیجه هر سه تیم یکسان است: 2016-09-11 00:00:00.

مثال 3

سه دستور زیر تاریخی را محاسبه می‌کنند که دقیقاً یک سال و نیم قبل از تاریخ معین است:

SELECT DATE_SUB("2016-09-10 23:59:59"، فاصله "1-6" YEAR_MONTH);

SELECT SUBDATE("2016-09-10 23:59:59", فاصله "1-6" YEAR_MONTH);

SELECT "2016-09-10 23:59:59" - فاصله "1-6" YEAR_MONTH;

نتیجه هر سه تیم یکسان است: 2015-03-10 23:59:59.

توابع تبدیل به واحدهای دیگر

گاهی اوقات کار با یک تاریخ که به عنوان تعداد روزهایی که از سال 0 گذشته است راحت است. برای تبدیل تاریخ به این فرمت و برگشت در MySQL، دو تابع وجود دارد:

  • TO_DAYS(تاریخ) – عدد روز مربوط به آرگومان تاریخ را برمی گرداند.
  • FROM_DAYS (شماره_روز)- تاریخ را مطابق شماره روز برمی گرداند.

استاندارد SQL-92 فقط توابعی را مشخص می کند که تاریخ/زمان سیستم را برمی گرداند. برای مثال، تابع CURRENT_TIMESTAMP هم تاریخ و هم زمان را برمی‌گرداند. به علاوه توابعی وجود دارد که یک چیز را برمی گرداند.
طبیعتاً به دلیل چنین محدودیت‌هایی، پیاده‌سازی زبان استاندارد را با افزودن توابعی گسترش می‌دهد که کار با داده‌هایی از این نوع را برای کاربران آسان‌تر می‌کند. در اینجا ما به توابع پردازش تاریخ/زمان در T-SQL نگاه خواهیم کرد.

تابع DATEADD

نحو

DATEADD( تاریخ , شماره, تاریخ)

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


بگذارید امروز 2004/01/23 باشد و ما می خواهیم بدانیم در یک هفته چه روزی خواهد بود. ما می توانیم بنویسیم زیرا قسمت کسری مقدار آرگومان است تاریخدور انداخته می شود و به جای یک چهارم و در نتیجه روز جاری 0 می گیریم.
روش دیگر، ما می توانیم به جای آن استفاده کنیم CURRENT_TIMESTAMPتابع T-SQL GETDATE()با همین اثر حضور دو عملکرد یکسان ظاهراً با پیش بینی توسعه بعدی استاندارد پشتیبانی می شود.
مثال (طرح 4). مشخص کنید که یک هفته پس از آخرین پرواز چه روزی خواهد بود.
SELECT DATEADD (روز، 7، (SELECT MAX(تاریخ) max_date FROM pass_in_trip))
استفاده از subquery به عنوان یک آرگومان قابل قبول است زیرا این سوال فرعی یک مقدار SINGLE از نوع را برمی گرداند تاریخ.

تابع DATEDIFF

نحو

DATEDIFF( تاریخ , تاریخ شروع , تاریخ پایان)

تابع فاصله زمانی سپری شده بین دو مهر زمانی را برمی گرداند - تاریخ شروع(علامت شروع) و تاریخ پایان(نشان پایان). این فاصله را می توان در واحدهای مختلف اندازه گیری کرد. گزینه های ممکنبا استدلال تعیین می شوند تاریخو در بالا در رابطه با عملکرد ذکر شده است DATEADD.
مثال (طرح 4). تعداد روزهایی که بین اولین و آخرین پرواز انجام شده سپری شده است را تعیین کنید.

(که -760 را می دهد) به دو دلیل نادرست خواهد بود.
اولاً، برای پروازهایی که یک روز حرکت می‌کنند و روز بعد می‌رسند، مقدار محاسبه‌شده به این صورت نادرست خواهد بود. ثانیاً، هیچ گونه فرضی در مورد روزی که فقط به دلیل نیاز به مطابقت با آن وجود دارد، غیرقابل اعتماد است. تاریخ.
اما چگونه می توان تشخیص داد که هواپیما روز بعد فرود آمده است؟ در اینجا توضیحات مربوط به موضوع کمک می کند، که بیان می کند که پرواز نمی تواند بیش از یک روز طول بکشد. بنابراین، اگر زمان رسیدن بیشتر از زمان خروج نباشد، این واقعیت صادق است. حالا سوال دوم: چگونه فقط زمان را محاسبه کنیم، مهم نیست در چه روزی باشد؟
این جایی است که تابع T-SQL می تواند کمک کند DATEPART.

تابع DATEPART

نحو

DATEPART( تاریخ , تاریخ)

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


توجه داشته باشید که تابع برگردانده شده است DATEPARTمقدار در این مورد (تعداد روز هفته) به تنظیمات بستگی دارد که با استفاده از اپراتور قابل تغییر است DATEFIRST را تنظیم کنید، که اولین روز هفته را تعیین می کند. برای برخی، دوشنبه روز سختی است و برای برخی دیگر یکشنبه است. به هر حال، آخرین مقدار پیش فرض است.
با این حال، اجازه دهید به مثال خود بازگردیم. با فرض اینکه زمان حرکت/رسیدن مضربی از یک دقیقه باشد، می‌توانیم آن را به صورت مجموع ساعت‌ها و دقیقه‌ها تعریف کنیم. از آنجایی که توابع تاریخ/زمان با مقادیر صحیح کار می کنند، نتیجه را به کوچکترین بازه - دقیقه کاهش می دهیم. بنابراین زمان حرکت پرواز 1123 بر حسب دقیقه است

حال باید مقایسه کنیم که آیا زمان رسیدن از زمان خروج بیشتر است یا خیر. اگر چنین است، دومی را از اولی کم کنید تا مدت زمان پرواز را بدست آورید. در غیر این صورت، باید یک روز به تفاوت اضافه کنید (24*60 = 1440 دقیقه).

SELECT CASE WHEN time_dep>=time_arr THEN time_arr-time_dep+1440 ELSE time_arr-time_dep END dur FROM
(SELECT DATEPART(hh, time_out)*60 + DATEPART(mi, time_out) time_dep, DATEPART(hh, time_in)*60 + DATEPART(mi, time_in) time_arr FROM trip WHERE trip_no=1123
)tm
در اینجا، برای اینکه ساخت‌های طولانی در دستور CASE تکرار نشود، از یک پرسش فرعی استفاده می‌شود. البته، نتیجه کاملاً دست و پا گیر بود، اما با توجه به نظراتی که در مورد این مشکل داده شد، کاملاً صحیح بود.
مثال (نمودار 4). تاریخ و ساعت حرکت پرواز 1123 را مشخص کنید.
جدول Pass_in_trip پروازهای انجام شده فقط حاوی تاریخ پرواز است، اما نه زمان، زیرا با توجه به موضوع، هر پرواز فقط یک بار در روز می تواند انجام شود. برای حل این مشکل، باید زمان را از جدول Trip به تاریخ ذخیره شده در جدول Pass_in_trip اضافه کنید.
متمایزدر اینجا برای حذف موارد تکراری احتمالی ضروری است، زیرا شماره و تاریخ پرواز در این جدول برای هر مسافر در یک پرواز مشخص تکرار شده است.

تابع DATENAME

نحو

DATENAME( تاریخ , تاریخ)

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

لازم به ذکر است که این تابعتفاوت در ارزش ها را آشکار می کند روزو روز سالاستدلال تاریخ. اولی یک نمایش نمادین از روز یک تاریخ مشخص را ارائه می دهد، در حالی که دومی یک نمایش نمادین از آن روز از ابتدای سال را ارائه می دهد. آن ها
SELECT DATENAME (روز، "2003-12-31")
به ما 31 می دهد و
SELECT DATENAME (روز سال، "2003-12-31")
- 365.
در برخی موارد عملکرد DATEPARTرا می توان با توابع ساده تر جایگزین کرد. در اینجا آنها هستند:
روز (تاریخ) یک نمایش عدد صحیح از روز تاریخ مشخص شده است. این تابع معادل تابع است DATEPART(dd, تاریخ).
ماه (تاریخ) یک نمایش عدد صحیح از ماه تاریخ مشخص شده است. این تابع معادل تابع است DATEPART(میلی متر, تاریخ).
سال (تاریخ) یک نمایش عدد صحیح از سال تاریخ مشخص شده است. این تابع معادل تابع است DATEPART(yy, تاریخ).

تابع @@DATEFIRST

@@DATEFIRST عددی را برمی‌گرداند که اولین روز هفته را برای جلسه فعلی تعیین می‌کند. در این مورد، 1 به ترتیب مربوط به دوشنبه، و 7، به یکشنبه است. آن ها اگر

@@DATEFIRST را انتخاب کنید.
7 را برمی گرداند، سپس اولین روز هفته یکشنبه است (مطابق با تنظیمات فعلی سایت).

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

همه توابع مورد بحث در زیر با انواع داده های تقویم کار می کنند.

دریافت تاریخ و زمان فعلی

برای بدست آوردن تاریخ و زمان فعلیتابع استفاده می شود اکنون ().

اکنون انتخاب کنید()
نتیجه: 2015-09-25 14:42:53

فقط برای دریافت تاریخ فعلییک تابع وجود دارد CURDATE().

انتخاب CURDATE()
نتیجه: 25/09/2015

و عملکرد CURTIME()، که فقط برمی گردد زمان فعلی:

SELECT CURTIME()
نتیجه: 14:42:53

توابع CURDATE() و NOW() برای افزودن رکوردها به پایگاه داده ای که می خواهید تاریخ اضافه شدن آنها را برای آن ذخیره کنید مفید هستند. به عنوان مثال، هنگام افزودن یک مقاله به یک وب سایت، ایده خوبی است که تاریخ انتشار آن را ذخیره کنید. سپس درخواست برای افزودن یک مقاله به پایگاه داده چیزی شبیه به این خواهد بود:

INSERT INTO posts (id_post، text_post، date_publication) VALUES (1، "متن مقاله"، اکنون ());

جمع و تفریق تاریخ و زمان

تابع ADDDATE (تاریخ، مقدار INTERVAL) به تاریخ اضافه می کندتاریخ معنیمقدار و مقدار حاصل را برمی گرداند. مقادیر زیر را می توان به عنوان مقدار استفاده کرد:

  • SECOND - ثانیه
  • MINUTE - دقیقه
  • HOUR - ساعت
  • روز - روز
  • هفته - هفته
  • ماه - ماه
  • ربع - بلوک
  • سال - سال

و همچنین ترکیب آنها:

  • MINUTE_SECOND - دقیقه و ثانیه
  • HOUR_SECOND ساعت - دقیقه و ثانیه
  • HOUR_MINUTE - ساعت و دقیقه
  • DAY_SECOND - روز، ساعت، دقیقه و ثانیه
  • DAY_MINUTE - روز، ساعت و دقیقه
  • DAY_HOUR - روزها و ساعت ها
  • YEAR_MONTH - سال و ماه.

SELECT ADDDATE ("2015-09-28 10:30:20"، INTERVAL 1 DAY)
نتیجه: 2015-09-29 10:30:20

SELECT ADDDATE ("2015-09-28 10:30:20"، INTERVAL "3 1:20" DAY_MINUTE)
نتیجه: 2015-10-01 11:50:20

تابع SUBDATE (تاریخ، مقدار INTERVAL)تولید می کند تفریقارزش ها از تاریختاریخ مثال:

انتخاب زیر تاریخ ("2015-09-28 10:30:20"، INTERVAL 20 HOUR)
نتیجه: 2015/09/27 14:30:20

تابع PERIOD_ADD (دوره، n) می افزایدبه دوره ارزش n ماه ها. مقدار دوره باید در قالب YYYYMM باشد (به عنوان مثال، سپتامبر 2015 201509 خواهد بود). مثال:

SELECT PERIOD_ADD (201509, 4)
نتیجه: 201601

تابع TIMESTAMPADD (فاصله، n، تاریخ) به تاریخ اضافه می کندتاریخ فاصله زمانی n ، که مقادیر آن توسط پارامتر فاصله مشخص می شود. مقادیر ممکنپارامتر فاصله:

  • FRAC_SECOND - میکروثانیه
  • SECOND - ثانیه
  • MINUTE - دقیقه
  • HOUR - ساعت
  • روز - روز
  • هفته - هفته
  • ماه - ماه
  • ربع - بلوک
  • سال - سال

SELECT TIMESTAMPADD (Quarter, 1, "2015-09-28")
نتیجه: 2015-12-28

تابع SUBTIME (تاریخ، زمان) از تاریخ کم می کندتاریخ زمانزمان مثال:

SELECT SUBTIME("2015-09-28 10:30:20", "50:20:19")
نتیجه: 2015-09-26 08:10:01

محاسبه فاصله بین تاریخ ها

تابع TIMEDIFF (تاریخ 1، تاریخ 2) تفاوت ساعت، دقیقه و ثانیه را محاسبه می کندبین دو تاریخ date1 و date2. مثال:

SELECT TIMEDIFF("2015-09-28 10:30:20", "2015-09-29 10:30:20")
نتیجه: -24:10:00

تابع DATEDIFF (تاریخ 1، تاریخ 2)محاسبه می کند تفاوت در روزبین دو تاریخ، در حالی که ساعت ها، دقیقه ها و ثانیه ها هنگام تعیین تاریخ نادیده گرفته می شوند. مثال:

SELECT DATEDIFF("2015-09-28 00:00:20", "2015-09-27 23:40:20")
نتیجه: 1

با استفاده از این تابع، به راحتی می توان تعیین کرد که چند روز از تاریخ انتشار مقاله گذشته است:

SELECT DATEDIFF (CURDATE()، date_publication) FROM posts WHERE id_post = 1

تابع PERIOD_DIFF (period1, period2)محاسبه می کند تفاوت در ماهبین دو تاریخ تاریخ ها باید در قالب YYYYMM باشند. برای مثال، بیایید دریابیم که از ژانویه 2015 تا سپتامبر 2015 چند ماه گذشته است:

SELECT PERIOD_DIFF (201509، 201501)
نتیجه: 9

تابع TIMESTAMPDIFF (فاصله، تاریخ 1، تاریخ 2)تفاوت بین تاریخ های date2 و date1 را در واحدهای مشخص شده در پارامتر فاصله محاسبه می کند. در این مورد، بازه می تواند مقادیر زیر را داشته باشد:

  • FRAC_SECOND - میکروثانیه
  • SECOND - ثانیه
  • MINUTE - دقیقه
  • HOUR - ساعت
  • روز - روز
  • هفته - هفته
  • ماه - ماه
  • ربع - بلوک
  • سال - سال

SELECT TIMESTAMPDIFF (HOUR، "2015-09-28 10:30:20"، "2015-09-28 19:50:20")
نتیجه: 9

بازیابی فرمت های مختلف تاریخ و زمان و اطلاعات دیگر

تابع DATE (تاریخ ساعت)برمی گرداند تاریخ، قطع زمان. مثال:

SELECT DATE("2015-09-28 10:30:20")
نتیجه: 28/09/2015

تابع TIME (زمان تاریخ)برمی گرداند زمان، قطع تاریخ. مثال:

انتخاب زمان ("2015-09-28 10:30:20")
نتیجه: 10:30:20

تابع TIMESTAMP (تاریخ)برمی گرداند فرمت کامل در طول زمانتاریخ تاریخ . مثال:

TIMESTAMP ("28-09-2015")
نتیجه: 2015-09-28 00:00:00

DAY (تاریخ)و DAYOFMONTH (تاریخ). توابع مترادف که برمی گردند شماره سریال روز ماه. مثال:

SELECT DAY ("2015-09-28")، DAYOFMONTH ("2015-09-28")
نتیجه: 28 | 28

توابع DAYNAME (تاریخ),DAYOFWEEK (تاریخ)و WEEKDAY (تاریخ). اولین تابع برمی گردد نام روز هفته، دوم - شماره روز هفته(شمارش از 1 - یکشنبه تا 7 - شنبه)، سومی نیز تعداد روزهای هفته است، فقط یک شمارش معکوس دیگر (شمارش از 0 - دوشنبه، تا 6 - یکشنبه). مثال:

SELECT DAYNAME ("2015-09-28")، DAYOFWEEK ("2015-09-28")، WEEKDAY ("2015-09-28")
نتیجه: دوشنبه 2 | 0

توابع WEEK (تاریخ)و WEEKOFYEAR (تاریخ). هر دو تابع برمی گردند شماره هفته سال، فقط هفته اول از یکشنبه و هفته دوم از دوشنبه شروع می شود. مثال:

SELECT WEEK ("2015-09-28 10:30:20")، WEEKOFYEAR ("2015-09-28 10:30:20")
نتیجه: 39 | 40

تابع MONTH (تاریخ)برمی گرداند مقدار عددی ماه(از 1 تا 12)، و MONTHNAME (تاریخ) نام ماه. مثال:

SELECT MONTH("2015-09-28 10:30:20")، MONTHNAME("2015-09-28 10:30:20")
نتیجه: 9 | سپتامبر

تابع QUARTER (تاریخ)برمی گرداند شماره بلوکسال (از 1 تا 4). مثال:

SELECT QUARTER ("2015-09-28 10:30:20")
نتیجه: 3

تابع YEAR (تاریخ)برمی گرداند ارزش سال(از 1000 تا 9999). مثال:

انتخاب سال ("2015-09-28 10:30:20")
نتیجه: 2015

تابع DAYOFYEAR (تاریخ)برمی گرداند شماره سریال روزدر سال (از 1 تا 366). پرایمر:

SELECT DAYOFYEAR ("2015-09-28 10:30:20")
نتیجه: 271

تابع HOUR (تاریخ)برمی گرداند ارزش ساعت(از 0 تا 23). مثال:

ساعت انتخابی ("2015-09-28 10:30:20")
نتیجه: 10

تابع MINUTE (زمان تاریخ)برمی گرداند ارزش دقیقه(از 0 تا 59). مثال:

SELECT MINUTE ("2015-09-28 10:30:20")
نتیجه: 30

تابع SECOND (زمان تاریخ)برمی گرداند مقدار ثانیه(از 0 تا 59). مثال:

SELECT SECOND ("2015-09-28 10:30:20")
نتیجه: 20

تابع EXTRACT (تایپ از تاریخ)قسمت تاریخ مشخص شده توسط پارامتر type را برمی گرداند. مثال:

SELECT EXTRACT (سال از "2015-09-28 10:30:20")، EXTRACT (ماه از "2015-09-28 10:30:20")، EXTRACT (DAY FROM "2015-09-28 10:30" :20")، EXTRACT (ساعت از "2015-09-28 10:30:20")، EXTRACT (دقیقه از "2015-09-28 10:30:20")، استخراج (دوم از "2015-09- 28 10:30:20")
نتیجه: 2015 | 9 | 28 | 10 | 30 | 20

توابع متقابل TO_DAYS (تاریخ)و FROM_DAYS (n). اول تاریخ را به تعداد روز تبدیل می کند، از سال صفر گذشت. دوم، برعکس، می پذیرد تعداد روز، از سال صفر گذشت و آنها را به تاریخ تبدیل می کند. مثال:

SELECT TO_DAYS ("2015-09-28 10:30:20")، FROM_DAYS (736234)
نتیجه: 736234 | 28/09/2015

توابع متقابل UNIX_TIMESTAMP (تاریخ)و FROM_UNIXTIME(n). اول تاریخ را به تعداد ثانیه تبدیل می کنداز 1 ژانویه 1970 گذشت. دوم، برعکس، می پذیرد تعداد ثانیه، از 1 ژانویه 1970 و آنها را به تاریخ تبدیل می کند. مثال:

UNIX_TIMESTAMP ("2015-09-28 10:30:20")، FROM_UNIXTIME (1443425420) را انتخاب کنید
نتیجه: 1443425420 | 2015-09-28 10:30:20

توابع متقابل TIME_TO_SEC (زمان)و SEC_TO_TIME(n). اول زمان را به تعداد ثانیه تبدیل می کند، از ابتدای روز گذشت. دوم، برعکس، تعداد ثانیه ها را از ابتدای روز گرفته و آنها را به زمان تبدیل می کند. مثال:

TIME_TO_SEC ("10:30:20")، SEC_TO_TIME (37820) را انتخاب کنید
نتیجه: 37820 | 10:30:20

تابع MAKEDATE (سال، n)سال سال و تعداد روز را در سال n می گیرد و آنها را به تاریخ تبدیل می کند. مثال.

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

من می خواهم تعدادی راه حل برای مشکلات رایج کار با تاریخ در SQL که خودم هر روز با آنها مواجه می شدم ارائه دهم، امیدوارم این برای شما مرتبط و مفید باشد.

نحوه دریافت تاریخ جاری در SQL
WHERE date = CURDATE()
یا گزینه دیگری
تاریخ WHERE = STR_TO_DATE(اکنون()، "%Y-%m-%d")

یک ساعت به تاریخ در SQL اضافه کنید
DATE_ADD ("30-03-2013"، INTERVAL 1 ساعت)

یک روز به تاریخ در SQL اضافه کنید
DATE_ADD ("30-03-2013"، INTERVAL 1 روز)
به طور مشابه، می توانید هر تعداد روز را به تاریخ فعلی اضافه کنید.

یک ماه به تاریخ در SQL اضافه کنید
DATE_ADD ("30-03-2013"، INTERVAL 1 MONTH)
به طور مشابه، می توانید هر تعداد ماه را به تاریخ فعلی اضافه کنید.

روز دیروز را در SQL دریافت کنید
DATE_ADD (CURDATE()، INTERVAL -1 روز)
یا
DATE_SUB(CURDATE()، INTERVAL 1 روز)

تاریخ شروع هفته جاری را در SQL دریافت کنید
این یکی از سخت ترین کارها در نگاه اول است، اما می توان آن را بسیار ساده حل کرد
CURDATE()-WEEKDAY(CURDATE());

انتخابی را از این دوشنبه تا روز جاری هفته در SQL دریافت کنید

انتخابی از روز اول ماه جاری تا روز جاری هفته را در SQL دریافت کنید
WHERE (تاریخ BETWEEN (CURDATE()-WEEKDAY(CURDATE())) و CURDATE())

نحوه دریافت تاریخ تولد کاربر در SQL
انتخاب نام، تولد، CURRENT_DATE، (YEAR(CURRENT_DATE)-YEAR(تولد)) - (RIGHT(CURRENT_DATE,5)

همه کاربرانی که ماه آینده تولدشان است را در SQL پیدا کنید
انتخاب نام، تولد از کاربر WHERE MONTH(تولد) = MONTH(DATE_ADD(NOW()، INTERVAL 1 MONTH));
یا گزینه دیگری
انتخاب نام، تولد از حیوان خانگی WHERE MONTH(تولد) = MOD(MONTH(NOW()), 12) + 1;

علاوه بر موارد فوق در مورد کار با تاریخ ها در SQL، توصیه می کنم اسناد اپراتورهای زیر را مطالعه کنید:
اکنون ()- تاریخ و زمان فعلی را برمی گرداند.
CURDATE()- تاریخ فعلی را برمی گرداند.
CURTIME()- ما زمان فعلی را برمی گردانیم.
DATE()– شامل دو قسمت تاریخ و زمان است.
EXTRACT()- یک مقدار تاریخ/زمان واحد را برمی‌گرداند.
DATE_ADD()– تعداد مشخص شده روز/دقیقه/ساعت و غیره را به نمونه اضافه می کند.
DATE_SUB()– فاصله زمانی مشخص شده را از تاریخ کم کنید.
DATEDIFF()– مقدار زمانی بین دو تاریخ را برمی گرداند.
DATE_FORMAT()- عملکرد برای خروجی های مختلف اطلاعات زمانی.

کار با تاریخ ها در SQl همانطور که مشخص است چندان دشوار نیست و اکنون به جای محاسبه دوره ها با استفاده از PHP، می توانید این کار را در مرحله اجرای پرس و جوی SQL انجام دهید و داده های لازم را انتخاب کنید.