Oracle与Mysql时间格式化
一,Oracle格式化时间:
Oracle 获取当前日期及日期格式
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
获取系统日期: SYSDATE()
格式化日期: TO_CHAR(SYSDATE(),
'YY/MM/DD HH24:MI:SS)
或 TO_DATE(SYSDATE(),'
YY/MM/DD HH24:MI:SS)
格式化数字: TO_NUMBER
注: TO_CHAR 把日期或数字转换为字符串
TO_CHAR(number,
'格式'
)
TO_CHAR(salary,
'$99,999.99'
)
TO_CHAR(
date
,
'格式'
)
TO_DATE 把字符串转换为数据库中的日期类型
TO_DATE(
char
,
'格式'
)
TO_NUMBER 将字符串转换为数字
TO_NUMBER(
char
,
'格式'
)
返回系统日期,输出 25-12月-09
select
sysdate
from
dual;
mi是分钟,输出 2009-12-25 14:23:31
select
to_char(sysdate,
'yyyy-MM-dd HH24:mi:ss'
)
from
dual;
mm会显示月份,输出 2009-12-25 14:12:31
select
to_char(sysdate,
'yyyy-MM-dd HH24:mm:ss'
)
from
dual;
输出 09-12-25 14:23:31
select
to_char(sysdate,
'yy-mm-dd hh24:mi:ss'
)
from
dual
输出 2009-12-25 14:23:31
select
to_date(
'2009-12-25 14:23:31'
,
'yyyy-mm-dd,hh24:mi:ss'
)
from
dual
而如果把上式写作:
select
to_date(
'2009-12-25 14:23:31'
,
'yyyy-mm-dd,hh:mi:ss'
)
from
dual
则会报错,因为小时hh是12进制,14为非法输入,不能匹配。
输出 $10,000,00 :
select
to_char(1000000,
'$99,999,99'
)
from
dual;
输出 RMB10,000,00 :
select
to_char(1000000,
'L99,999,99'
)
from
dual;
输出 1000000.12 :
select
trunc(to_number(
'1000000.123'
),2)
from
dual;
select
to_number(
'1000000.123'
)
from
dual;
转换的格式:
表示
year
的:y 表示年的最后一位 、
yy 表示年的最后2位 、
yyy 表示年的最后3位 、
yyyy 用4位数表示年
表示
month
的: mm 用2位数字表示月 、
mon 用简写形式, 比如11月或者nov 、
month
用全称, 比如11月或者november
表示
day
的: dd 表示当月第几天 、
ddd 表示当年第几天 、
dy 当周第几天,简写, 比如星期五或者fri 、
day
当周第几天,全称, 比如星期五或者friday
表示
hour
的:hh 2位数表示小时 12进制 、
hh24 2位数表示小时 24小时
表示
minute
的:mi 2位数表示分钟
表示
second
的:ss 2位数表示秒 60进制
表示季度的:q 一位数 表示季度 (1-4)
另外还有ww 用来表示当年第几周 w用来表示当月第几周。
24小时制下的时间范围:00:00:00-23:59:59
12小时制下的时间范围:1:00:00-12:59:59
数字格式: 9 代表一个数字
0 强制显示0
$ 放置一个$符
L 放置一个浮动本地货币符
. 显示小数点
, 显示千位指示符
补充:
当前时间减去7分钟的时间
select
sysdate,sysdate - interval
'7'
MINUTE
from
dual;
当前时间减去7小时的时间
select
sysdate - interval
'7'
hour
from
dual;
当前时间减去7天的时间
select
sysdate - interval
'7'
day
from
dual;
当前时间减去7月的时间
select
sysdate,sysdate - interval
'7'
month
from
dual;
当前时间减去7年的时间
select
sysdate,sysdate - interval
'7'
year
from
dual;
时间间隔乘以一个数字
select
sysdate,sysdate - 8*interval
'7'
hour
from
dual;
含义解释:
Dual伪列
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的
select
语句块中。
不同系统可能返回日期的格式不一样。
返回当前连接的用户:
select
user
from
dual;
二,mysql格式化时间:
MYSQL 获取当前日期及日期格式
获取系统日期: NOW()
格式化日期: DATE_FORMAT(
date
, format)
注:
date
:时间字段
format:日期格式
返回系统日期,输出 2009-12-25 14:38:59
select
now();
输出 09-12-25
select
date_format(now(),
'%y-%m-%d'
);
根据format字符串格式化
date
值:
%S, %s 两位数字形式的秒( 00,01, ..., 59)
%I, %i 两位数字形式的分( 00,01, ..., 59)
%H 两位数字形式的小时,24 小时(00,01, ..., 23)
%h 两位数字形式的小时,12 小时(01,02, ..., 12)
%k 数字形式的小时,24 小时(0,1, ..., 23)
%l 数字形式的小时,12 小时(1, 2, ..., 12)
%T 24 小时的时间形式(hh:mm:ss)
%r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
%p AM或PM
%W 一周中每一天的名称(Sunday, Monday, ..., Saturday)
%a 一周中每一天名称的缩写(Sun, Mon, ..., Sat)
%d 两位数字表示月中的天数(00, 01,..., 31)
%e 数字形式表示月中的天数(1, 2, ..., 31)
%D 英文后缀表示月中的天数(1st, 2nd, 3rd,...)
%w 以数字形式表示周中的天数( 0 = Sunday, 1=Monday, ..., 6=Saturday)
%j 以三位数字表示年中的天数( 001, 002, ..., 366)
%U 周(0, 1, 52),其中Sunday 为周中的第一天
%u 周(0, 1, 52),其中Monday 为周中的第一天
%M 月名(January, February, ..., December)
%b 缩写的月名( January, February,...., December)
%m 两位数字表示的月份(01, 02, ..., 12)
%c 数字表示的月份(1, 2, ...., 12)
%Y 四位数字表示的年份
%y 两位数字表示的年份
%% 直接值“%”
curdate()
MySQL 获得当前日期时间 函数
1.1 获得当前日期+时间(
date
+
time
)函数:now()
mysql>
select
now();
+
---------------------+
| now() |
+
---------------------+
| 2008-08-08 22:20:46 |
+
---------------------+
除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:
current_timestamp
()
,
current_timestamp
,localtime()
,localtime
,localtimestamp
-- (v4.0.6)
,localtimestamp()
-- (v4.0.6)
这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。
1.2 获得当前日期+时间(
date
+
time
)函数:sysdate()
sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:
mysql>
select
now(), sleep(3), now();
+
---------------------+----------+---------------------+
| now() | sleep(3) | now() |
+
---------------------+----------+---------------------+
| 2008-08-08 22:28:21 | 0 | 2008-08-08 22:28:21 |
+
---------------------+----------+---------------------+mysql> select sysdate(), sleep(3), sysdate();
+
---------------------+----------+---------------------+
| sysdate() | sleep(3) | sysdate() |
+
---------------------+----------+---------------------+
| 2008-08-08 22:28:41 | 0 | 2008-08-08 22:28:44 |
+
---------------------+----------+---------------------+
可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3秒。MySQL Manual 中是这样描述 sysdate() 的:
Return
the
time
at
which the functionexecutes。
sysdate() 日期时间函数,一般情况下很少用到。
2. 获得当前日期(
date
)函数:curdate()
mysql>
select
curdate();
+
------------+
| curdate() |
+
------------+
| 2008-08-08 |
+
------------+
其中,下面的两个日期函数等同于 curdate():
current_date
()
,
current_date
3. 获得当前时间(
time
)函数:curtime()
mysql>
select
curtime();
+
-----------+
| curtime() |
+
-----------+
| 22:41:30 |
+
-----------+
其中,下面的两个时间函数等同于 curtime():
current_time
()
,
current_time
4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()
mysql>
select
utc_timestamp(), utc_date(), utc_time(), now()
+
---------------------+------------+------------+---------------------+
| utc_timestamp() | utc_date() | utc_time() | now() |
+
---------------------+------------+------------+---------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
+
---------------------+------------+------------+---------------------+
因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
|
二、MySQL 日期时间 Extract(选取) 函数。
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
80
81
82
83
84
85
86
87
88
89
90
91
92
|
1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
set
@dt =
'2008-09-10 07:15:30.123456'
;
select
date
(@dt);
-- 2008-09-10
select
time
(@dt);
-- 07:15:30.123456
select
year
(@dt);
-- 2008
select
quarter(@dt);
-- 3
select
month
(@dt);
-- 9
select
week(@dt);
-- 36
select
day
(@dt);
-- 10
select
hour
(@dt);
-- 7
select
minute
(@dt);
-- 15
select
second
(@dt);
-- 30
select
microsecond(@dt);
-- 123456
2. MySQL Extract() 函数,可以上面实现类似的功能:
set
@dt =
'2008-09-10 07:15:30.123456'
;
select
extract(
year
from
@dt);
-- 2008
select
extract(quarter
from
@dt);
-- 3
select
extract(
month
from
@dt);
-- 9
select
extract(week
from
@dt);
-- 36
select
extract(
day
from
@dt);
-- 10
select
extract(
hour
from
@dt);
-- 7
select
extract(
minute
from
@dt);
-- 15
select
extract(
second
from
@dt);
-- 30
select
extract(microsecond
from
@dt);
-- 123456select extract(year_month from @dt); -- 200809
select
extract(day_hour
from
@dt);
-- 1007
select
extract(day_minute
from
@dt);
-- 100715
select
extract(day_second
from
@dt);
-- 10071530
select
extract(day_microsecond
from
@dt);
-- 10071530123456
select
extract(hour_minute
from
@dt);
-- 715
select
extract(hour_second
from
@dt);
-- 71530
select
extract(hour_microsecond
from
@dt);
-- 71530123456
select
extract(minute_second
from
@dt);
-- 1530
select
extract(minute_microsecond
from
@dt);
-- 1530123456
select
extract(second_microsecond
from
@dt);
-- 30123456
MySQLExtract() 函数除了没有
date
(),
time
() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond’等功能。注意这里不是只选取
day
和 microsecond,而是从日期的
day
部分一直选取到 microsecond 部分。够强悍的吧!
MySQL Extract() 函数唯一不好的地方在于:你需要多敲几次键盘。
3. MySQL dayof… 函数:dayofweek(), dayofmonth(), dayofyear()
分别返回日期参数,在一周、一月、一年中的位置。
set
@dt =
'2008-08-08'
;
select
dayofweek(@dt);
-- 6
select
dayofmonth(@dt);
-- 8
select
dayofyear(@dt);
-- 221
日期 ‘2008-08-08′ 是一周中的第 6 天(1 = Sunday, 2 = Monday, …, 7 = Saturday);一月中的第 8 天;一年中的第 221 天。
4. MySQL week… 函数:week(), weekofyear(), dayofweek(), weekday(), yearweek()
set
@dt =
'2008-08-08'
;
select
week(@dt);
-- 31
select
week(@dt,3);
-- 32
select
weekofyear(@dt);
-- 32
select
dayofweek(@dt);
-- 6
select
weekday(@dt);
-- 4
select
yearweek(@dt);
-- 200831
MySQL week() 函数,可以有两个参数,具体可看手册。 weekofyear() 和 week() 一样,都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。
MySQLweekday() 函数和 dayofweek() 类似,都是返回“某天”在一周中的位置。不同点在于参考的标准, weekday:(0 =Monday, 1 = Tuesday, …, 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday,…, 7 = Saturday)
MySQL yearweek() 函数,返回
year
(2008) + week 位置(31)。
5. MySQL 返回星期和月份名称函数:dayname(), monthname()
set
@dt =
'2008-08-08'
;
select
dayname(@dt);
-- Friday
select
monthname(@dt);
-- August
思考,如何返回中文的名称呢?
6. MySQL last_day() 函数:返回月份中的最后一天。
select
last_day(
'2008-02-01'
);
-- 2008-02-29
select
last_day(
'2008-08-08'
);
-- 2008-08-31
MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:
mysql>
select
now(),
day
(last_day(now()))
as
days;
+
---------------------+------+
| now() | days |
+
---------------------+------+
| 2008-08-09 11:45:45 | 31 |
+
---------------------+------+
|
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
|
1. MySQL 为日期增加一个时间间隔:date_add()
set
@dt = now();
select
date_add(@dt, interval 1
day
);
-- add 1 day
select
date_add(@dt, interval 1
hour
);
-- add 1 hour
select
date_add(@dt, interval 1
minute
);
-- ...
select
date_add(@dt, interval 1
second
);
select
date_add(@dt, interval 1 microsecond);
select
date_add(@dt, interval 1 week);
select
date_add(@dt, interval 1
month
);
select
date_add(@dt, interval 1 quarter);
select
date_add(@dt, interval 1
year
);
select
date_add(@dt, interval -1
day
);
-- sub 1 day
MySQL adddate(), addtime()函数,可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:
mysql>
set
@dt =
'2008-08-09 12:12:33'
;
mysql>
mysql>
select
date_add(@dt, interval
'01:15:30'
hour_second);
+
------------------------------------------------+
| date_add(@dt, interval
'01:15:30'
hour_second) |
+
------------------------------------------------+
| 2008-08-09 13:28:03 |
+
------------------------------------------------+mysql> select date_add(@dt, interval '1 01:15:30' day_second);
+
-------------------------------------------------+
| date_add(@dt, interval
'1 01:15:30'
day_second) |
+
-------------------------------------------------+
| 2008-08-10 13:28:03 |
+
-------------------------------------------------+
date_add() 函数,分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议:总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。
2. MySQL 为日期减去一个时间间隔:date_sub()
mysql>
select
date_sub(
'1998-01-01 00:00:00'
, interval
'1 1:1:1'
day_second);
+
----------------------------------------------------------------+
| date_sub(
'1998-01-01 00:00:00'
, interval
'1 1:1:1'
day_second) |
+
----------------------------------------------------------------+
| 1997-12-30 22:58:59 |
+
----------------------------------------------------------------+
MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。
3. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)
函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N
month
(月)。
MySQL period_add(P,N):日期加/减去N月。
mysql>
select
period_add(200808,2), period_add(20080808,-2)
+
----------------------+-------------------------+
| period_add(200808,2) | period_add(20080808,-2) |
+
----------------------+-------------------------+
| 200810 | 20080806 |
+
----------------------+-------------------------+
MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。
mysql>
select
period_diff(200808, 200801);
+
-----------------------------+
| period_diff(200808, 200801) |
+
-----------------------------+
| 7 |
+
-----------------------------+
在 MySQL 中,这两个日期函数,一般情况下很少用到。
4. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。
select
datediff(
'2008-08-08'
,
'2008-08-01'
);
-- 7
select
datediff(
'2008-08-01'
,
'2008-08-08'
);
-- -7
MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回
time
差值。
select
timediff(
'2008-08-08 08:08:08'
,
'2008-08-08 00:00:00'
);
-- 08:08:08
select
timediff(
'08:08:08'
,
'00:00:00'
);
-- 08:08:08
注意:timediff(time1,time2) 函数的两个参数类型必须相同。
|
四、MySQL 日期转换函数、时间转换函数
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
1. MySQL (时间、秒)转换函数:time_to_sec(
time
), sec_to_time(seconds)
select
time_to_sec(
'01:00:05'
);
-- 3605
select
sec_to_time(3605);
-- '01:00:05'
2. MySQL (日期、天数)转换函数:to_days(
date
), from_days(days)
select
to_days(
'0000-00-00'
);
-- 0
select
to_days(
'2008-08-08'
);
-- 733627select from_days(0); -- '0000-00-00'
select
from_days(733627);
-- '2008-08-08'
3. MySQL Str
to
Date
(字符串转换为日期)函数:str_to_date(str, format)
select
str_to_date(
'08/09/2008'
,
'%m/%d/%Y'
);
-- 2008-08-09
select
str_to_date(
'08/09/08'
,
'%m/%d/%y'
);
-- 2008-08-09
select
str_to_date(
'08.09.2008'
,
'%m.%d.%Y'
);
-- 2008-08-09
select
str_to_date(
'08:09:30'
,
'%h:%i:%s'
);
-- 08:09:30
select
str_to_date(
'08.09.2008 08:09:30'
,
'%m.%d.%Y %h:%i:%s'
);
-- 2008-08-09 08:09:30
可以看到,str_to_date(str,format) 转换函数,可以把一些杂乱无章的字符串转换为日期格式。另外,它也可以转换为时间。“format” 可以参看 MySQL 手册。
4. MySQL
Date
/
Time
to
Str(日期/时间转换为字符串)函数:date_format(
date
,format), time_format(
time
,format)
mysql>
select
date_format(
'2008-08-08 22:23:00'
,
'%W %M %Y'
);
+
------------------------------------------------+
| date_format(
'2008-08-08 22:23:00'
,
'%W %M %Y'
) |
+
------------------------------------------------+
| Friday August 2008 |
+
------------------------------------------------+mysql> select date_format('2008-08-08 22:23:01', '%Y%m%d%H%i%s');
+
----------------------------------------------------+
| date_format(
'2008-08-08 22:23:01'
,
'%Y%m%d%H%i%s'
) |
+
----------------------------------------------------+
| 20080808222301 |
+
----------------------------------------------------+mysql> select time_format('22:23:01', '%H.%i.%s');
+
-------------------------------------+
| time_format(
'22:23:01'
,
'%H.%i.%s'
) |
+
-------------------------------------+
| 22.23.01 |
+
-------------------------------------+
MySQL 日期、时间转换函数:date_format(
date
,format), time_format(
time
,format) 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。
5. MySQL 获得国家地区时间格式函数:get_format()
MySQL get_format() 语法:
get_format(
date
|
time
|datetime,
'eur'
|
'usa'
|
'jis'
|
'iso'
|
'internal'
MySQL get_format() 用法的全部示例:
select
get_format(
date
,
'usa'
) ;
-- '%m.%d.%Y'
select
get_format(
date
,
'jis'
) ;
-- '%Y-%m-%d'
select
get_format(
date
,
'iso'
) ;
-- '%Y-%m-%d'
select
get_format(
date
,
'eur'
) ;
-- '%d.%m.%Y'
select
get_format(
date
,
'internal'
) ;
-- '%Y%m%d'
select
get_format(datetime,
'usa'
) ;
-- '%Y-%m-%d %H.%i.%s'
select
get_format(datetime,
'jis'
) ;
-- '%Y-%m-%d %H:%i:%s'
select
get_format(datetime,
'iso'
) ;
-- '%Y-%m-%d %H:%i:%s'
select
get_format(datetime,
'eur'
) ;
-- '%Y-%m-%d %H.%i.%s'
select
get_format(datetime,
'internal'
) ;
-- '%Y%m%d%H%i%s'
select
get_format(
time
,
'usa'
) ;
-- '%h:%i:%s %p'
select
get_format(
time
,
'jis'
) ;
-- '%H:%i:%s'
select
get_format(
time
,
'iso'
) ;
-- '%H:%i:%s'
select
get_format(
time
,
'eur'
) ;
-- '%H.%i.%s'
select
get_format(
time
,
'internal'
) ;
-- '%H%i%s'
MySQL get_format() 函数在实际中用到机会的比较少。
6. MySQL 拼凑日期、时间函数:makdedate(
year
,dayofyear), maketime(
hour
,
minute
,
second
)
select
makedate(2001,31);
-- '2001-01-31'
select
makedate(2001,32);
-- '2001-02-01'select maketime(12,15,30); -- '12:15:30' 五、MySQL 时间戳(Timestamp)函数
1. MySQL 获得当前时间戳函数:
current_timestamp
,
current_timestamp
()
mysql>
select
current_timestamp
,
current_timestamp
();
+
---------------------+---------------------+
|
current_timestamp
|
current_timestamp
() |
+
---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+
---------------------+---------------------+
2. MySQL (Unix 时间戳、日期)转换函数:
unix_timestamp(),
unix_timestamp(
date
),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)
下面是示例:
select
unix_timestamp();
-- 1218290027
select
unix_timestamp(
'2008-08-08'
);
-- 1218124800
select
unix_timestamp(
'2008-08-08 12:30:00'
);
-- 1218169800select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select
from_unixtime(1218124800);
-- '2008-08-08 00:00:00'
selectfrom_unixtime(1218169800);
-- '2008-08-08 12:30:00'selectfrom_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August12:30:00 2008'
3. MySQL 时间戳(
timestamp
)转换、增、减函数:
timestamp
(
date
)
-- date to timestamp
timestamp
(dt,
time
)
-- dt + time
timestampadd(unit,interval,datetime_expr)
--
timestampdiff(unit,datetime_expr1,datetime_expr2)
--
请看示例部分:
select
timestamp
(
'2008-08-08'
);
-- 2008-08-08 00:00:00
select
timestamp
(
'2008-08-08 08:00:00'
,
'01:01:01'
);
-- 2008-08-08 09:01:01
selecttimestamp(
'2008-08-08 08:00:00'
,
'10 01:01:01'
);
-- 2008-08-1809:01:01select timestampadd(day, 1, '2008-08-08 08:00:00'); --2008-08-09 08:00:00
select
date_add(
'2008-08-08 08:00:00'
, interval 1
day
);
-- 2008-08-09 08:00:00
MySQL timestampadd() 函数类似于 date_add()。
select
timestampdiff(
year
,
'2002-05-01'
,
'2001-01-01'
);
-- -1
select
timestampdiff(
day
,
'2002-05-01'
,
'2001-01-01'
);
-- -485
select
timestampdiff(
hour
,
'2008-08-08 12:00:00'
,
'2008-08-08 00:00:00'
);
-- -12
select
datediff(
'2008-08-08 12:00:00'
,
'2008-08-01 00:00:00'
);
-- 7
MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(
date
)之间相差的天数。
六、MySQL 时区(timezone)转换函数convert_tz(dt,from_tz,to_tz)selectconvert_tz(
'2008-08-08 12:00:00'
,
'+08:00'
,
'+00:00'
);
-- 2008-08-0804:00:00
时区转换也可以通过 date_add, date_sub, timestampadd 来实现。
select
date_add(
'2008-08-08 12:00:00'
, interval -8
hour
);
-- 2008-08-08 04:00:00
select
date_sub(
'2008-08-08 12:00:00'
, interval 8
hour
);
-- 2008-08-08 04:00:00
select
timestampadd(
hour
, -8,
'2008-08-08 12:00:00'
);
-- 2008-08-08 04:00:00
|