مشکل ترین قسمت کار با تاریخ زمان تطبیق دادن تاریخ زمان ی است که می خواهیم در فیلد بنوسیم با فرمت تعریف شده برای ان فیلد است
توابع تاریخ زمان در mysql
now()  تاریخ و زمان فعلی سیستم را بر می گرداند
 CURDATE()  تاریخ فعلی سیستم را بر می گرداند
 CURTIME()  زمان فعلی سیستم را بر می گرداند
 DATE() قسمت تاریخ یک تاریخ یا تاریخ زمان را بر می گرداند
 EXTRACT()   جزئی از تاریخ زمان را بر می گرداند
DATE_ADD()  زمانی را به تاریخ اضافه می کند
DATE_SUB()  زمانی را از تاریخ کم می کند
DATEDIFF()  تعداد روزهای بین دو تاریخ را بر می گرداند
DATE_FORMAT()  تاریخ و زمان را در قالب های مختلف بر می گرداند
 
 
تابع now

 این تابع برابر تاریخ و زمان سیستم کامپیوتر ما می باشد

 مثال :

SELECT NOW(),CURDATE(),CURTIME()

 مقدار سه تابع بالا را نمایش می دهد

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

 مثال

CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (OrderId)
)

 در جدول مثال بالا ، فیلد OrderDate از نوع datetime تعریف شده که نباید مقدار ان خالی بماند و به طور پیش فرض مقدار تاریخ زمان فعلی کامپیوتر با تابع now برای هر رکورد جدید در ان قرار خواهد گرفت

 حال ما می خواهیم رکورد جدید به جدول Orders اضافه نمائیم :

 

INSERT INTO Orders (ProductName) VALUES ('Jarlsberg Cheese')

 جدول به صورت زیر خواهد شد :

 

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11 13:23:44.657
تابع CURDATE

 تاریخ فعلی سیستم کامپیوترمان را بر می گرداند

 مثال

SELECT NOW(),CURDATE(),CURTIME()

 مقدار هر سه تابع را نمایش می دهد

 خروجی این دستور بصورت زیر خواهد شد :

 

NOW()CURDATE()CURTIME()
2008-11-11 12:45:34 2008-11-11 12:45:34

 مثال

 در جدول Orders فیلدی به نام OrderDate را از نوع datetime تعریف کرده و می خواهیم بصورت پیش فرض مقدار تاریخ سیستم در ان برای هر رکورد جدید قرار گیرد

 CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT CURDATE(),
PRIMARY KEY (OrderId)
)

 حال می خواهیم رکورد جدید به این جدول اضافه نمائیم

INSERT INTO Orders (ProductName) VALUES ('Jarlsberg Cheese')

 جدول بصورت زیر خواهد شد :

 

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11
تابع DATE(date)
 تابع date پارامتری از نوع تاریخ زمان می گیرد و فقط قسمت تاریخ انرا برمی گرداند

مثال

جدول orders بصورت زیر وجود دارد

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11 13:23:44.657

 دستور زیر را داریم :

SELECT ProductName, DATE(OrderDate) AS OrderDate
FROM Orders
WHERE OrderId=1

نتیجه بصورت زیر خواهد بود

ProductNameOrderDate
Jarlsberg Cheese 2008-11-11
تابع EXTRACT
 از این تابع برای بدست اوردن جزئی از تاریخ زمان مثل سال یا ماه یا روز یا ساعت یا دقیقه یا ثانیه استفاده می شود

 روش استفاده :

این تابع پارامتری از نوع تاریخ زمان می گیرد

EXTRACT(unit FROM date)

 مقادیر مختلفی که می توان به جای unit گذاشت بصورت زیر است :
Unit Value
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
 مثال

جدول زیر را داریم :

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11 13:23:44.657

حال دستورات زیر را داریم :

SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay,
FROM Orders
WHERE OrderId=1

نتیجه اجرای دستورات بالا بصورت زیر است

OrderYearOrderMonthOrderDay
2008 11 11
تابع DATE_ADD
 زمان خاصی را به تاریخ می افزاید

 روش استفاده :

DATE_ADD(date,INTERVAL expr type)

  date یک تاریخ است و expr زمانی است که باید به تاریخ افزوده شود و type می تواند یکی از مقادیر زیر باشد
Type Value
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

 مثال

جدول orders را بصورت زیر داریم :

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11 13:23:44.657
 حالا می خواهیم 45 روز به تاریخ موجود در فیلد orderdate بیافزائیم
SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 45 DAY) AS OrderPayDate
FROM Orders
 نتیجه ای که مشاهده خواهیم کرد بصورت زیر است :
OrderIdOrderPayDate
1 2008-12-26 13:23:44.657
تابع DATE_SUB
 زمان مشخصی را از تاریخ زمان کم می کند

روش استفاده از این تابع :

DATE_SUB(date,INTERVAL expr type)

   date یک تاریخ است و expr زمانی است که باید از تاریخ کم شود و type می تواند یکی از مقادیر زیر باشد
Type Value
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

 مثال

جدول orders بصورت زیر موجود است

OrderIdProductNameOrderDate
1 Jarlsberg Cheese 2008-11-11 13:23:44.657
 حال می خواهیم 5 روز از تاریخ موجود در فیلد orderdate کم کرده نتجه را نمایش دهیم
SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 5 DAY) AS SubtractDate
FROM Orders

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

OrderIdSubtractDate
1 2008-11-06 13:23:44.657
تابع DATEDIFF
 زمان موجود در بین دو تاریخ را بر می گرداند

 روش استفاده :

DATEDIFF(date1,date2)

 در این دستور فقط تاریخ مورد محاسبه قرار می گیرد

 مثال

SELECT DATEDIFF('2008-11-30','2008-11-29') AS DiffDate

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

DiffDate
1


 مثال

SELECT DATEDIFF('2008-11-29','2008-11-30') AS DiffDate

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

 

DiffDate
-1
تابع DATE_FORMAT
 از این تابع برای نمایش تاریخ زمان در قالب های مختلف بکار می رود

 روش استفاده :

DATE_FORMAT(date,format)

 مقدارهای مختلف برای format بصورت زیر است :
 
FormatDescription
%a Abbreviated weekday name
%b Abbreviated month name
%c Month, numeric
%D Day of month with English suffix
%d Day of month, numeric (00-31)
%e Day of month, numeric (0-31)
%f Microseconds
%H Hour (00-23)
%h Hour (01-12)
%I Hour (01-12)
%i Minutes, numeric (00-59)
%j Day of year (001-366)
%k Hour (0-23)
%l Hour (1-12)
%M Month name
%m Month, numeric (00-12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss AM or PM)
%S Seconds (00-59)
%s Seconds (00-59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00-53) where Sunday is the first day of week
%u Week (00-53) where Monday is the first day of week
%V Week (01-53) where Sunday is the first day of week, used with %X
%v Week (01-53) where Monday is the first day of week, used with %x
%W Weekday name
%w Day of the week (0=Sunday, 6=Saturday)
%X Year of the week where Sunday is the first day of week, four digits, used with %V
%x Year of the week where Monday is the first day of week, four digits, used with %v
%Y Year, four digits
%y Year, two digits

 مثال

به چند روش می خواهیم تاریخ زمان فعلی سیستم را مشاهده نمائیم

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
 نتیجه بصورت زیر است
Nov 04 2008 11:45 PM
11-04-2008
04 Nov 08
04 Nov 2008 11:45:34:243
توابع تاریخ زمان در SQL SERVER
توابع مهم در SQL SERVERبصورت زیر است
تابعتوضیحات
GETDATE() زمان تاریخ فعلی سیستم را بر می گرداند
DATEPART() جزئی از تاریخ زمان را بر می گرداند
DATEADD() زمان مشخصی را به تاریخ افزوده یا کم می کند
DATEDIFF() اختلاف دو تاریخ را بر می گرداند
CONVERT() تاریخ و زمان را در قالب های مختلف نمایش می دهد
 
انواع نوع داده تاریخ / زمان در MYSQL , SQL SERVER

با انواع مختلف نوع داده تاریخ / زمان می توان قالب بندی مختلفی در ذخیره تاریخ و زمان در فیلدها تعریف کرد

در زیر ، نوع داده و قالب بندی هریک را مشاهده می کنید

  • DATE - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - format: YYYY-MM-DD HH:MM:SS
  • YEAR - format YYYY or YY
 
انواع نوع داده تاریخ /زمان و قالب بندی هریک در ذخیره تاریخ و زمان در فیلد مربوطه در SQL SERVER را خواهید دید :
  • DATE - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - format: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - format: a unique number
 می توان به راحتی برای انتخاب فیلد از نوع تاریخ شرط گذاشت به شرط اینکه هیچ جزء زمانی شامل ساعت دقیقه و ثانیه در ان نباشد

مثال

جدول ORDERS بصورت زیر است

OrderIdProductNameOrderDate
1 Geitost 2008-11-11
2 Camembert Pierrot 2008-11-09
3 Mozzarella di Giovanni 2008-11-11
4 Mascarpone Fabioli 2008-10-29

 دستور زیر را داریم :

SELECT * FROM Orders WHERE OrderDate='2008-11-11'

رکوردهایی را می خواهیم که ORDERDATE انها برابر 2008-11-11 باشد

OrderIdProductNameOrderDate
1 Geitost 2008-11-11
3 Mozzarella di Giovanni 2008-11-11

 حال فرض کنید جدول ORDERS بصورت زیر است :

OrderIdProductNameOrderDate
1 Geitost 2008-11-11 13:23:44
2 Camembert Pierrot 2008-11-09 15:45:21
3 Mozzarella di Giovanni 2008-11-11 11:12:01
4 Mascarpone Fabioli 2008-10-29 14:56:59

 حال دستور زیر را داریم :

SELECT * FROM Orders WHERE OrderDate='2008-11-11'
 این دستور نتیجه ای نخواهد داشت زیرا در ستون ORDERDATE در جدول مقدار زمانی هم داریم
نکته : اگر می خواهید کوئری های راحت و اسان بنویسید در فیلد تاریخ / زمان خود جزء زمان را وارد نکنید