Current_timestamp (transact-sql)current_timestamp (transact-sql)

SQL Справочник

SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL ОператорыSQL Типы данныхSQL Краткий справочник

SQL Server

There are several ways to get the current date in SQL Server, and all of them use functions.

Function Data Type Returns
SYSDATETIME() datetime2 Server date time to 7 fractional seconds
SYSDATETIMEOFFSET() datetimeoffset Server date time with time zone to 7 fractional seconds
SYSUTCDATETIME() datetime2 Server date time in UTC to 7 fractional seconds
CURRENT_TIMESTAMP datetime Server date time to 3 fractional seconds
GETDATE() datetime Server date time to 3 fractional seconds
GETUTCDATE() datetime Server date time in UTC to 3 fractional seconds

These six functions all return the date and time to different amounts of fractional seconds or based on time zones. Notice that CURRENT_TIMESTAMP does not need any opening or closing brackets.

(You can read more about MySQL date data types and functions in this guide)

Let’s see an example of this.

The results are below (translated to rows to make it easier to compare):

Function Result
SYSDATETIME() 2020-07-15 16:24:38.7750094
SYSDATETIMEOFFSET() 2020-07-15 16:24:38.7750094 +00:00
SYSUTCDATETIME() 2020-07-15 06:24:38.7750094
CURRENT_TIMESTAMP 2020-07-15 16:24:38.773
GETDATE() 2020-07-15 16:24:38.773
GETUTCDATE() 2020-07-15 06:24:38.773

You can see some differences here:

  • The first three functions show fractional seconds to 7 places.
  • The two UTC time functions show the current time in the UTC time zone. I ran these functions in Melbourne, Australia, which is UTC +10.

You can also see that CURRENT_TIMESTAMP and GETDATE() show the same values.

CURRENT_TIMESTAMP vs GETDATE

What’s the difference between CURRENT_TIMESTAMP and GETDATE() in SQL Server?

CURRENT_TIMESTAMP is an ANSI SQL compliant function, meaning it complies with the standards (and is likely to exist in other database vendors). GETDATE() is the T-SQL version of that function.

How to Get Just the Current Date in SQL Server

The functions above show the current date and time.

But what if you only want to get the current date, and not the time?

There are two ways you can do that: use CAST or use CONVERT.

I’ve written about this method in a recent post: How to Convert DATETIME to DATE in SQL Server.

Here’s an example:

Result:

date_cast date_convert
2020-07-15 2020-07-15

Both methods return the same value.

CONVERT_TZ(dt,from_tz,to_tz)

This converts a datetime value dt from the time zone given by from_tz to the time zone given by to_tz and returns the resulting value. This function returns NULL if the arguments are invalid.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')           |
+---------------------------------------------------------+
| 2004-01-01 13:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00')     |
+---------------------------------------------------------+
| 2004-01-01 22:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Пример

Рассмотрим примеры MySQL функции DATE_SUB, чтобы понять, как использовать функцию DATE_SUB в MySQL.
Например:

MySQL

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21.000001’, INTERVAL 4 MICROSECOND);

#Результат: 2014-11-02 08:44:20.999997

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL -20 SECOND);

#Результат: 2014-11-02 08:44:41

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL 25 MINUTE);

#Результат: 2014-11-02 08:19:21

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL 2 HOUR);

#Результат: 2014-11-02 06:44:21

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL 10 DAY);

#Результат: 2014-10-23

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL 12 WEEK);

#Результат: 2014-08-10

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL 3 MONTH);

#Результат: 2014-08-02

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL 3 QUARTER);

#Результат: 2014-02-02

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL 5 YEAR);

#Результат: 2009-11-02

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21.000001’, INTERVAL ‘12.000001’ SECOND_MICROSECOND);

#Результат: 2014-11-02 08:44:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21.000001’, INTERVAL ‘3:12.000001’ MINU

#Результат: 2014-11-02 08:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘3:12’ MINUTE_SECOND);

#Результат: 2014-11-02 08:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21.000001’, INTERVAL ‘1:03:12.000001’ HOUR_MICROSECOND);

#Результат: 2014-11-02 07:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘1:03:12’ HOUR_SECOND);

#Результат: 2014-11-02 07:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘1:03’ HOUR_MINUTE);

#Результат: 2014-11-02 07:41:21

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21.000001’, INTERVAL ‘7 1:03:12.000001’ DAY_MICROSECOND);

#Результат: 2014-10-26 07:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘7 1:03:12’ DAY_SECOND);

#Результат: 2014-10-26 07:41:09

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘7 1:03’ DAY_MINUTE);

#Результат: 2014-10-26 07:41:21

mysql> SELECT DATE_SUB(‘2014-11-02 08:44:21’, INTERVAL ‘7 1’ DAY_HOUR);

#Результат: 2014-10-26 07:44:21

mysql> SELECT DATE_SUB(‘2014-11-02’, INTERVAL ‘5-3’ YEAR_MONTH);

#Результат: 2009-08-02

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21.000001’,INTERVAL4MICROSECOND);
 
#Результат:   2014-11-02 08:44:20.999997                                    
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL-20SECOND);
 
#Результат:   2014-11-02 08:44:41                                  
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL25MINUTE);
 
#Результат:   2014-11-02 08:19:21                                
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL2HOUR);
 
#Результат:   2014-11-02 06:44:21                              
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL10DAY);
 
#Результат:   2014-10-23                              
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL12WEEK);
 
#Результат:   2014-08-10                              
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL3MONTH);
 
#Результат:   2014-08-02                              
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL3QUARTER);
 
#Результат:   2014-02-02                                
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL5YEAR);
 
#Результат:   2009-11-02                              
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21.000001’,INTERVAL’12.000001’SECOND_MICROSECOND);
 
#Результат:   2014-11-02 08:44:09  
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21.000001’,INTERVAL’3:12.000001’MINU
 
#Результат:   2014-11-02 08:41:09    
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’3:12’MINUTE_SECOND);
 
#Результат:   2014-11-02 08:41:09                                            
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21.000001’,INTERVAL’1:03:12.000001’HOUR_MICROSECOND);
 
#Результат:   2014-11-02 07:41:09    
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’1:03:12’HOUR_SECOND);
 
#Результат:   2014-11-02 07:41:09                                            
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’1:03’HOUR_MINUTE);
 
#Результат:   2014-11-02 07:41:21                                          
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21.000001’,INTERVAL’7 1:03:12.000001’DAY_MICROSECOND);
 
#Результат:   2014-10-26 07:41:09
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’7 1:03:12’DAY_SECOND);
 
#Результат:   2014-10-26 07:41:09                                              
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’7 1:03’DAY_MINUTE);
 
#Результат:   2014-10-26 07:41:21                                          
 
mysql>SELECTDATE_SUB(‘2014-11-02 08:44:21’,INTERVAL’7 1’DAY_HOUR);
 
#Результат:   2014-10-26 07:44:21                                      
 
mysql>SELECTDATE_SUB(‘2014-11-02’,INTERVAL’5-3’YEAR_MONTH);
 
#Результат:   2009-08-02

PostgreSQL

To get the current date in PostgreSQL, we can use one of several functions:

Function Returns
CURRENT_DATE Current date and time
CURRENT_TIMESTAMP Current date and time with timezone
LOCALTIMESTAMP Current date and time
NOW Current date and time, same as CURRENT_TIMESTAMP

The return values of these functions look like this:

Results:

Function Result
CURRENT_DATE 2020-07-16
CURRENT_TIMESTAMP 2020-07-16 05:19:32.201578 EDT
LOCALTIMESTAMP 2020-07-16 05:19:32
NOW 2020-07-16 05:19:32.201578 EDT

We can see that CURRENT_DATE shows only the date, but CURRENT_TIMESTAMP and LOCALTIMESTAMP show the date and time.

What’s the Difference Between CURRENT_TIMESTAMP and LOCALTIMESTAMP in PostgreSQL?

The difference is that LOCALTIMESTAMP returns a timestamp without a timezone, and CURRENT_TIMESTAMP returns a timestamp with a timezone.

TIMESTAMPADD(unit,interval,datetime_expr)

This function adds the integer expression interval to the date or datetime expression datetime_expr. The unit for interval is given by the unit argument, which should be one of the following values −

  • FRAC_SECOND
  • SECOND, MINUTE
  • HOUR, DAY
  • WEEK
  • MONTH
  • QUARTER or
  • YEAR

The unit value may be specified using one of the keywords as shown or with a prefix of SQL_TSI_.

For example, DAY and SQL_TSI_DAY both are legal.

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
+---------------------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2003-01-02')                     |
+---------------------------------------------------------+
| 2003-01-02 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Working With SQL Dates

Our “Users” Table:

id username first last member_since
1 ohBillNotAgain Hillary Clinton 2011-12-25
2 internetCreator Al Gore 2011-12-8
3 dontMessWithTexas George Bush 2011-7-9

Let’s try to get all of our members before December 25, 2011.

Example

SELECT *
FROM Users
WHERE member_since < '2011-12-25'

Result

id username first last member_since
2 internetCreator Al Gore 2011-12-8
3 dontMessWithTexas George Bush 2011-7-9

Alright, we said BEFORE December 25, 2011, which means poor Hillary isn’t included because she is on that day. Al barely made the cut, but old George was way before our cut off date. I suppose we should actually talk about what happened. Up to WHERE member_since < ‘2011-12-25’, we know what were doing. We could probably guess what is going on here, but I’ll beat the dead horse. We check our member_since column to see if it is less than, <, our date, which was written in single quotes as ‘2011-12-25’. Often when googling for help with dates, you see this syntax referred to as ‘YYYY-MM-DD’, where Y is for year, M is for month, and D is for day, obviously. Each repetition is a symbol of a blank character space for that element. So, you only want 2 digits for month because that makes sense, and maybe you don’t care about the first 2 characters of year. Instead you just write, YY to get 11. Easy enough, onto the wonderful DATETIMEs

Функции даты и времени

MySQL содержит множество функций, которые используются для обработки даты и времени. В приведенной ниже таблице представлен список наиболее часто используемых функций:

Функция Описание
ADDDATE() Добавляет дату.
ADDTIME() Добавляет время.
CONVERT_TZ() Конвертирует из одного часового пояса в другой.
CURDATE() Возвращает текущую дату.
CURTIME() Возвращает текущее системное время.
DATE_ADD() Добавляет одну дату к другой.
MySQL DATE FORMAT () Задает указанный формат даты.
DATE() Извлекает часть даты из даты или выражения дата-время.
DATEDIFF() Вычитает одну дату из другой.
DAYNAME() Возвращает день недели.
DAYOFMONTH() Возвращает день месяца (1-31).
DAYOFWEEK() Возвращает индекс дня недели из аргумента.
DAYOFYEAR() Возвращает день года (1-366).
EXTRACT Извлекает часть даты.
FROM_DAYS() Преобразует номер дня в дату.
FROM_UNIXTIME() Задает формат даты в формате UNIX.
MySQL DATE_SUB() Вычитает одну дату из другой.
HOUR() Извлекает час.
LAST_DAY Возвращает последний день месяца для аргумента.
MAKEDATE() Создает дату из года и дня года.
MAKETIME () Возвращает значение времени.
MICROSECOND() Возвращает миллисекунды из аргумента.
MINUTE() Возвращает минуты из аргумента.
MONTH() Возвращает месяц из переданной даты.
MONTHNAME() Возвращает название месяца.
NOW() Возвращает текущую дату и время.
PERIOD_ADD() Добавляет интервал к месяцу-году.
PERIOD_DIFF() Возвращает количество месяцев между двумя периодами.
QUARTER() Возвращает четверть часа из переданной даты в качестве аргумента.
SEC_TO_TIME() Конвертирует секунды в формат ‘ЧЧ:MM:СС’.
SECOND() Возвращает секунду (0-59).
MySQL STR TO DATE () Преобразует строку в дату.
SUBTIME() Вычитает время.
SYSDATE() Возвращает время, в которое была выполнена функция.
TIME_FORMAT() Задает формат времени.
TIME_TO_SEC() Возвращает аргумент, преобразованный в секунды.
TIME() Выбирает часть времени из выражения, передаваемого в качестве аргумента.
TIMEDIFF() Вычитает время.
TIMESTAMP() С одним аргументом эта функция возвращает дату или выражение дата-время. С двумя аргументами возвращается сумма аргументов.
TIMESTAMPADD() Добавляет интервал к дате-времени.
TIMESTAMPDIFF() Вычитает интервал из даты — времени.
TO_DAYS() Возвращает аргумент даты, преобразованный в дни.
UNIX_TIMESTAMP() Извлекает дату-время в формате UNIX в формат, принимаемый MySQL.
UTC_DATE() Возвращает текущую дату по универсальному времени (UTC).
UTC_TIME() Возвращает текущее время по универсальному времени (UTC).
UTC_TIMESTAMP() Возвращает текущую дату-время по универсальному времени (UTC).
WEEK() Возвращает номер недели.
WEEKDAY() Возвращает индекс дня недели.
WEEKOFYEAR() Возвращает календарную неделю даты (1-53).
YEAR() Возвращает год.
YEARWEEK() Возвращает год и неделю.

Вы можете поэкспериментировать с этими функциями MySQL date format, даже не занося никаких данных в таблицу. Например:

mysql> SELECT NOW();

+---------------------+
| NOW()               |
+---------------------+
| 2007-10-23 11:46:31 |
+---------------------+
1 row in set (0.00 sec)

Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):

mysql> SELECT MONTHNAME(NOW());

+------------------+
| MONTHNAME(NOW()) |
+------------------+
| October |
+------------------+
1 row in set (0.00 sec)

SQL Работа с датами

Вы можете легко сравнить две даты, если нет никакого компонента времени!

Предположим, что у нас есть следующая таблица «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

Теперь мы хотим выбрать записи с порядковым номером «2008-11-11» из приведенной выше таблицы.

Мы используем следующую инструкцию SELECT:

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

Результирующий набор будет выглядеть следующим образом:

OrderId ProductName OrderDate
1 Geitost 2008-11-11
3 Mozzarella di Giovanni 2008-11-11

Теперь предположим, что таблица «Orders» выглядит следующим образом (обратите внимание на компонент time в столбце «OrderDate»):

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, что и выше:

SELECT * FROM Orders WHERE OrderDate=’2008-11-11′

Мы не получим никакого результата! Это происходит потому, что запрос ищет только даты без временной части.

Совет: Чтобы ваши запросы были простыми и удобными в обслуживании, не допускайте компонентов времени в ваших датах!

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

If called with no argument, this function returns a Unix timestamp (seconds since ‘1970-01-01 00:00:00’ UTC) as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value of the argument as seconds since ‘1970-01-01 00:00:00’ UTC. date may be a DATE string, a DATETIME string, a TIMESTAMP, or a number in the format YYMMDD or YYYYMMDD.

mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP()                                        |
+---------------------------------------------------------+
| 882226357                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00')                   |
+---------------------------------------------------------+
| 875996580                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Функции для добавления (или вычитания) некоторого значения к моменту

ADDDATE(date, INTERVAL value) — возвращает дату, к которой
прибавлено значение value. Ключевое слово INTERVAL обязательно следует в запросе, после него
указывается значение value, а затем единицы измерения прибавляемого значения. Ими могут быть
SECOND (секунды), MINUTE (минуты), HOUR (часы), MINUTE_SECOND (минуты и секунды),
HOUR_MINUTE (часы и минуты), DAY_SECOND (дни, часы минуты и секунды), DAY_MINUTE (дни, часы и минуты),
DAY_HOUR (дни и часы), YEAR_MONTH (годы и месяцы).

SUBDATE(date, INTERVAL value) — вычитает из величины даты date
произвольный временной интервал и возвращает результат. Ключевое слово INTERVAL обязательно следует в запросе, после него
указывается значение value, а затем единицы измерения вычитаемого значения. Возможные единицы измерения —
те же, что и для функции ADDDATE().

SUBTIME(datetime, time) — вычитает из величины времени datetime вида
‘YYYY-MM-DD hh:mm:ss’ произвольно заданное значение времени time и возвращает результат.

PERIOD_ADD(period, N) — добавляет N месяцев к значению
даты period. Значение period должно быть представлено в числовом формате ‘YYYYMM’ или ‘YYMM’.

TIMESTAMPADD(interval, param1, param2) — прибавляет к дате и времени
суток param2 в полном или кратком формате временной интервал param1, единицы измерения которого заданы
параметром interval. Возможные единицы измерения — те же, что и для функции TIMESTAMPDIFF().

Параметр значений

Параметр Описание
date Требуемый. Дата будет отформатирована
format Требуемый. Формат для использования. Может быть одно или комбинация следующих значений:

Формат Описание
%a Сокращенное название дня недели (от ВС до СБ)
%b Сокращенное название месяца (Янв-Дек)
%c Числовое название месяца (от 0 до 12)
%D День месяца как числовое значение, за которым следует суффикс (1-й, 2-й, 3-й, …)
%d День месяца как числовое значение (от 01 до 31)
%e День месяца как числовое значение (от 0 до 31)
%f Микросекунды (от 000000 до 999999)
%H Час (с 00 до 23)
%h Час (с 00 до 12)
%I Час (с 00 до 12)
%i Минуты (с 00 до 59)
%j День года (от 001 до 366)
%k Час (от 0 до 23)
%l Час (от 1 до 12)
%M Название месяца полностью (Январь-Декабрь)
%m Название месяца в виде числового значения (от 00 до 12)
%p AM или PM
%r Время в 12-часовом AM или PM формат (hh:mm:ss AM/PM)
%S Секунды (от 00 до 59)
%s Секунды (от 00 до 59)
%T Время в 24-часовом формат (hh:mm:ss)
%U Неделя, где воскресенье — это первый день недели (с 00 до 53)
%u Неделя, где понедельник — это первый день недели (с 00 до 53)
%V Неделя, где воскресенье — это первый день недели (с 01 по 53). Используется с %X
%v Неделя, где понедельник — это первый день недели (с 01 по 53). Используется с %X
%W Название дня недели полностью (с воскресенья по субботу)
%w День недели, где воскресенье=0 и суббота=6
%X Год для недели, где воскресенье — это первый день недели. Используется с %V
%x Год для недели, где понедельник — это первый день недели. Используется с %V
%Y Год как числовое, 4-значное значение
%y Год как числовое, 2-значное значение

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

These functions perform date arithmetic. The date is a DATETIME or DATE value specifying the starting date. The expr is an expression specifying the interval value to be added or subtracted from the starting date. The expr is a string; it may start with a ‘-‘ for negative intervals.

A unit is a keyword indicating the units in which the expression should be interpreted.

The INTERVAL keyword and the unit specifier are not case sensitive.

The following table shows the expected form of the expr argument for each unit value.

unit Value Expected exprFormat
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND ‘SECONDS.MICROSECONDS’
MINUTE_MICROSECOND ‘MINUTES.MICROSECONDS’
MINUTE_SECOND ‘MINUTES:SECONDS’
HOUR_MICROSECOND ‘HOURS.MICROSECONDS’
HOUR_SECOND ‘HOURS:MINUTES:SECONDS’
HOUR_MINUTE ‘HOURS:MINUTES’
DAY_MICROSECOND ‘DAYS.MICROSECONDS’
DAY_SECOND ‘DAYS HOURS:MINUTES:SECONDS’
DAY_MINUTE ‘DAYS HOURS:MINUTES’
DAY_HOUR ‘DAYS HOURS’
YEAR_MONTH ‘YEARS-MONTHS’

The values QUARTER and WEEK are available from the MySQL 5.0.0. version.

mysql> SELECT DATE_ADD('1997-12-31 23:59:59', 
   -> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL...             |
+---------------------------------------------------------+
| 1998-01-01 00:01:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR)                 |
+---------------------------------------------------------+
| 1999-01-01 01:00:00                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

Извлечение данных по дате и времени

В MySQL мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:

mysql> SELECT * FROM orders WHERE MONTHNAME(order_delivery) = 'November';
+----------+------------+---------------------+----------------+
| order_no | order_item | order_date          | order_delivery |
+----------+------------+---------------------+----------------+
|        1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06     |
+----------+------------+---------------------+----------------+
1 row in set (0.00 sec)

Точно так же мы можем использовать BETWEEN, чтобы выбрать товары, доставка которых произойдет между двумя указанными датами. Например:

mysql> SELECT * FROM orders WHERE order_delivery BETWEEN '2007-12-01' AND '2008-01-01';
+----------+----------------+---------------------+----------------+
| order_no | order_item     | order_date          | order_delivery |
+----------+----------------+---------------------+----------------+
|        2 | ipod Touch 4Gb | 2007-10-23 11:51:09 | 2007-12-23     |
+----------+----------------+---------------------+----------------+
1 row in set (0.03 sec)

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

Returns the integer difference between the date or datetime expressions datetime_expr1 and datetime_expr2. The unit for the result is given by the unit argument. The legal values for the unit are the same as those listed in the description of the TIMESTAMPADD() function.

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01')          |
+---------------------------------------------------------+
| 3                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

UPDATE несколько записей

Именно предложение WHERE определяет, сколько записей будет обновлено.

Следующая инструкция SQL обновит имя контакта до «Juan» для всех записей, где страна — «Mexico»:

Пример

UPDATE Customers
SET ContactName=’Juan’
WHERE Country=’Mexico’;

Выбор из таблицы «Customers» теперь будет выглядеть следующим образом:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Alfred Schmidt Obere Str. 57 Frankfurt 12209 Germany
2 Ana Trujillo Emparedados y helados Juan Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Juan Mataderos 2312 México D.F. 05023 Mexico
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

Параметр значений

Параметр Описание
string Требуемый. Строка, которая будет отформатирована до даты
format Требуемый. Формат для использования. Может быть одно или комбинация следующих значений:

Формат Описание
%a Сокращенное название дня недели (от ВС до СБ)
%b Сокращенное название месяца (январь-декабрь)
%c Числовое название месяца (от 0 до 12)
%D День месяца как числовое значение, за которым следует суффикс (1-й, 2-й, 3-й, …)
%d День месяца как числовое значение (от 01 до 31)
%e День месяца как числовое значение (от 0 до 31)
%f Микросекунды (от 000000 до 999999)
%H Час (с 00 до 23)
%h Час (с 00 до 12)
%I Час (с 00 до 12)
%i Минуты (от 00 до 59)
%j День года (от 001 до 366)
%k Час (от 0 до 23)
%l Час (от 1 до 12)
%M Название месяца полностью (январь-декабрь)
%m Название месяца в виде числового значения (от 00 до 12)
%p AM или PM
%r Время в формате 12 часов утра или вечера (hh:mm:ss AM/PM)
%S Секунды (от 00 до 59)
%s Секунды (от 00 до 59)
%T Время в 24-часовом формате (hh:mm:ss)
%U Неделя, где воскресенье — это первый день недели (с 00 до 53)
%u Неделя, где понедельник — это первый день недели (с 00 до 53)
%V Неделя, где воскресенье — это первый день недели (с 01 по 53). Используется с %X
%v Неделя, где понедельник — это первый день недели (с 01 по 53). Используется с %X
%W Название дня недели полностью (с воскресенья по субботу)
%w День недели, где воскресенье=0 и суббота=6
%X Год для недели, где воскресенье — это первый день недели. Используется с %V
%x Год для недели, где понедельник — это первый день недели. Используется с %V
%Y Год как числовое, 4-значное значение
%y Год как числовое, 2-значное значение

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector