مشکل ترین قسمت کار با تاریخ زمان تطبیق دادن تاریخ زمان ی است که می خواهیم در فیلد بنوسیم با فرمت تعریف شده برای ان فیلد است |
توابع تاریخ زمان در mysql |
|
now() | تاریخ و زمان فعلی سیستم را بر می گرداند | CURDATE() | تاریخ فعلی سیستم را بر می گرداند | CURTIME() | زمان فعلی سیستم را بر می گرداند | DATE() | قسمت تاریخ یک تاریخ یا تاریخ زمان را بر می گرداند | EXTRACT() | جزئی از تاریخ زمان را بر می گرداند | DATE_ADD() | زمانی را به تاریخ اضافه می کند | DATE_SUB() | زمانی را از تاریخ کم می کند | DATEDIFF() | تعداد روزهای بین دو تاریخ را بر می گرداند | DATE_FORMAT() | تاریخ و زمان را در قالب های مختلف بر می گرداند |
|
|
|
|
این تابع برابر تاریخ و زمان سیستم کامپیوتر ما می باشد |
مثال: 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') |
جدول به صورت زیر خواهد شد: |
OrderId | ProductName | OrderDate |
---|
1 | Jarlsberg Cheese | 2008-11-11 13:23:44.657 |
|
|
تاریخ فعلی سیستم کامپیوترمان را بر می گرداند |
مثال 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') |
جدول بصورت زیر خواهد شد: |
OrderId | ProductName | OrderDate |
---|
1 | Jarlsberg Cheese | 2008-11-11 |
|
|
تابع date پارامتری از نوع تاریخ زمان می گیرد و فقط قسمت تاریخ انرا برمی گرداند |
مثال جدول orders بصورت زیر وجود دارد |
OrderId | ProductName | OrderDate |
---|
1 | Jarlsberg Cheese | 2008-11-11 13:23:44.657 |
|
دستور زیر را داریم: SELECT ProductName, DATE(OrderDate) AS OrderDate FROM Orders WHERE OrderId=1 |
نتیجه بصورت زیر خواهد بود |
ProductName | OrderDate |
---|
Jarlsberg Cheese | 2008-11-11 |
|
|
از این تابع برای بدست اوردن جزئی از تاریخ زمان مثل سال یا ماه یا روز یا ساعت یا دقیقه یا ثانیه استفاده می شود |
روش استفاده: این تابع پارامتری از نوع تاریخ زمان می گیرد 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 |
|
مثال |
جدول زیر را داریم: OrderId | ProductName | OrderDate |
---|
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 |
نتیجه اجرای دستورات بالا بصورت زیر است |
OrderYear | OrderMonth | OrderDay |
---|
2008 | 11 | 11 |
|
|
زمان خاصی را به تاریخ می افزاید |
روش استفاده: 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 را بصورت زیر داریم: OrderId | ProductName | OrderDate |
---|
1 | Jarlsberg Cheese | 2008-11-11 13:23:44.657 |
|
حالا می خواهیم 45 روز به تاریخ موجود در فیلد orderdate بیافزائیم |
SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 45 DAY) AS OrderPayDate FROM Orders |
نتیجه ای که مشاهده خواهیم کرد بصورت زیر است: |
OrderId | OrderPayDate |
---|
1 | 2008-12-26 13:23:44.657 |
|
|
زمان مشخصی را از تاریخ زمان کم می کند |
روش استفاده از این تابع: 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 بصورت زیر موجود است OrderId | ProductName | OrderDate |
---|
1 | Jarlsberg Cheese | 2008-11-11 13:23:44.657 |
|
حال می خواهیم 5 روز از تاریخ موجود در فیلد orderdate کم کرده نتجه را نمایش دهیم |
SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 5 DAY) AS SubtractDate FROM Orders |
نتیجه جدولی بصورت زیر می باشد: OrderId | SubtractDate |
---|
1 | 2008-11-06 13:23:44.657 |
|
|
زمان موجود در بین دو تاریخ را بر می گرداند |
روش استفاده: DATEDIFF(date1,date2) |
در این دستور فقط تاریخ مورد محاسبه قرار می گیرد |
مثال SELECT DATEDIFF('2008-11-30','2008-11-29')AS DiffDate |
نتیجه بصورت زیر مشاهده خواهد شد:
|
مثال SELECT DATEDIFF('2008-11-29','2008-11-30')AS DiffDate |
نتیجه بصورت زیر مشاهده خواهد شد: |
|
|
از این تابع برای نمایش تاریخ زمان در قالب های مختلف بکار می رود |
روش استفاده: DATE_FORMAT(date,format) |
مقدارهای مختلف برای format بصورت زیر است: |
Format | Description |
---|
%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 بصورت زیر است OrderId | ProductName | OrderDate |
---|
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 باشد |
OrderId | ProductName | OrderDate |
---|
1 | Geitost | 2008-11-11 | 3 | Mozzarella di Giovanni | 2008-11-11 |
|
حال فرض کنید جدول ORDERS بصورت زیر است: OrderId | ProductName | OrderDate |
---|
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 در جدول مقدار زمانی هم داریم |
نکته: اگر می خواهید کوئری های راحت و اسان بنویسید در فیلد تاریخ / زمان خود جزء زمان را وارد نکنید |