??xml version="1.0" encoding="utf-8" standalone="yes"?>
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
q回日期date的星期烦(ch)?1=星期天,2=星期一, ……7=星期?。这些烦(ch)引值对应于ODBC标准?br />
mysql> select DAYOFWEEK('1998-02-03'/res/images/smilies/wink.gif;
-> 3
WEEKDAY(date)
q回date的星期烦(ch)?0=星期一Q?=星期? ……6= 星期??br />
mysql> select WEEKDAY('1997-10-04 22:23:00'/res/images/smilies/wink.gif;
-> 5
mysql> select WEEKDAY('1997-11-05'/res/images/smilies/wink.gif;
-> 2
DAYOFMONTH(date)
q回date的月份中日期Q在1?1范围内?br />
mysql> select DAYOFMONTH('1998-02-03'/res/images/smilies/wink.gif;
-> 3
DAYOFYEAR(date)
q回date在一q中的日? ??66范围内?br />
mysql> select DAYOFYEAR('1998-02-03'/res/images/smilies/wink.gif;
-> 34
MONTH(date)
q回date的月份,范围1?2?br />
mysql> select MONTH('1998-02-03'/res/images/smilies/wink.gif;
-> 2
DAYNAME(date)
q回date的星期名字?br />
mysql> select DAYNAME("1998-02-05"/res/images/smilies/wink.gif;
-> 'Thursday'
MONTHNAME(date)
q回date的月份名字?br />
mysql> select MONTHNAME("1998-02-05"/res/images/smilies/wink.gif;
-> 'February'
QUARTER(date)
q回date一q中的季度,范围1??br />
mysql> select QUARTER('98-04-01'/res/images/smilies/wink.gif;
-> 2
WEEK(date)
WEEK(date,first)
对于星期天是一周的W一天的地方Q有一个单个参敎ͼq回date的周敎ͼ范围??2?个参数Ş式WEEK()允许
你指定星期是否开始于星期天或星期一。如果第二个参数?Q星期从星期天开始,如果W二个参数是1Q?
从星期一开始?br />
mysql> select WEEK('1998-02-20'/res/images/smilies/wink.gif;
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
YEAR(date)
q回date的年份,范围?000?999?br />
mysql> select YEAR('98-02-03'/res/images/smilies/wink.gif;
-> 1998
HOUR(time)
q回time的小Ӟ范围??3?br />
mysql> select HOUR('10:05:03'/res/images/smilies/wink.gif;
-> 10
MINUTE(time)
q回time的分钟,范围??9?br />
mysql> select MINUTE('98-02-03 10:05:03'/res/images/smilies/wink.gif;
-> 5
SECOND(time)
回来time的秒敎ͼ范围??9?br />
mysql> select SECOND('10:05:03'/res/images/smilies/wink.gif;
-> 3
PERIOD_ADD(P,N)
增加N个月到阶DPQ以格式YYMM或YYYYMM)。以格式YYYYMMq回倹{注意阶D参数P不是日期倹{?br />
mysql> select PERIOD_ADD(9801,2);
-> 199803
PERIOD_DIFF(P1,P2)
q回在时期P1和P2之间月数QP1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期倹{?br />
mysql> select PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
q些功能执行日期q算。对于MySQL 3.22Q他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词?
在MySQL 3.23中,你可以??而不是DATE_ADD()和DATE_SUB()。(见例子)(j)date是一个指定开始日期的
DATETIME或DATE|expr是指定加到开始日期或从开始日期减ȝ间隔g个表辑ּQexpr是一个字W串Q它可以?
一?#8220;-”开始表C间隔。type是一个关键词Q指明表辑ּ应该如何被解释。EXTRACT(type FROM date)函数从日?
中返?#8220;type”间隔。下表显CZ(jin)type和expr参数怎样被关联:(x) type?含义 期望的expr格式
SECOND U?SECONDS
MINUTE 分钟 MINUTES
HOUR 旉 HOURS
DAY ?DAYS
MONTH ?MONTHS
YEAR q?YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 时和分?"HOURS:MINUTES"
DAY_HOUR 天和时 "DAYS HOURS"
YEAR_MONTH q和?"YEARS-MONTHS"
HOUR_SECOND 时, 分钟Q?"HOURS:MINUTES:SECONDS"
DAY_MINUTE ? 时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND ? 时, 分钟, U?"DAYS HOURS:MINUTES:SECONDS"
MySQL在expr格式中允怓Q何标点分隔符。表C显C的是徏议的分隔W。如果date参数是一个DATE值ƈ且你的计仅?
包含YEAR、MONTH和DAY部分(卻I没有旉部分)Q结果是一个DATE倹{否则结果是一个DATETIME倹{?br />
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02"/res/images/smilies/wink.gif;
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"/res/images/smilies/wink.gif;
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"/res/images/smilies/wink.gif;
-> 20102
如果你指定太短的间隔?不包括type关键词期望的间隔部分)QMySQL假设你省掉了(jin)间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECONDQ值expr被希望有天、小时、分钟和U部分。如果你?1:10"q样指定|
MySQL假设日子和小旉分是丢失的ƈ且g表分钟和U。换句话_(d)"1:10" DAY_SECOND以它{h(hun)?1:10" MINUTE_SECOND
的方式解释,q对那MySQL解释TIMEDC经q的旉而非作ؓ(f)一天的旉的方式有二义性。如果你使用实不正的日期Q?
l果是NULL。如果你增加MONTH、YEAR_MONTH或YEARq且l果日期大于新月份的最大值天敎ͼ日子在新月用最大的天调整?br />
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
注意Q从前面的例子中词INTERVAL和type关键词不是区分大写的?br />
TO_DAYS(date)
l出一个日期dateQ返回一个天??q的天数)?br />
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07'/res/images/smilies/wink.gif;
-> 729669
TO_DAYS()不打用于用格列高里历(1582)出现前的倹{?br />
FROM_DAYS(N)
l出一个天数NQ返回一个DATE倹{?br />
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
TO_DAYS()不打用于用格列高里历(1582)出现前的倹{?br />
DATE_FORMAT(date,format)
Ҏ(gu)format字符串格式化date倹{下列修饰符可以被用在format字符串中Q?%M 月名?January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前~的月份的日期(1st, 2nd, 3rd, {等。)(j)
%Y q? 数字, 4 ?br />
%y q? 数字, 2 ?br />
%a ~写的星期名?Sun……Sat)
%d 月䆾中的天数, 数字(00……31)
%e 月䆾中的天数, 数字(0……31)
%m ? 数字(01……12)
%c ? 数字(1……12)
%b ~写的月份名?Jan……Dec)
%j 一q中的天?001……366)
%H 时(00……23)
%k 时(0……23)
%h 时(01……12)
%I 时(01……12)
%l 时(1……12)
%i 分钟, 数字(00……59)
%r 旉,12 时(hh:mm:ss [AP]M)
%T 旉,24 时(hh:mm:ss)
%S U?00……59)
%s U?00……59)
%p AM或PM
%w 一个星期中的天?0=Sunday ……6=Saturday Q?br />
%U 星期(0……52), q里星期天是星期的第一?br />
%u 星期(0……52), q里星期一是星期的W一?br />
%% 一个文?#8220;%”?br />
所有的其他字符不做解释被复制到l果中?br />
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'/res/images/smilies/wink.gif;
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'/res/images/smilies/wink.gif;
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j'/res/images/smilies/wink.gif;
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w'/res/images/smilies/wink.gif;
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需?。在MySQL更早的版本中Q?是可选的?br />
TIME_FORMAT(time,format)
q象上面的DATE_FORMAT()函数一样用,但是format字符串只能包含处理小时、分钟和U的那些格式修饰W?
其他修饰W生一个NULL值或0?br />
CURDATE()
CURRENT_DATE
?YYYY-MM-DD'或YYYYMMDD格式q回今天日期|取决于函数是在一个字W串q是数字上下文被使用?br />
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
?HH:MM:SS'或HHMMSS格式q回当前旉|取决于函数是在一个字W串q是在数字的上下文被使用?br />
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
?YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式q回当前的日期和旉Q取决于函数是在一个字W串q是在数字的
上下文被使用?br />
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用Q返回一个Unix旉戌(?1970-01-01 00:00:00'GMT开始的U数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的U数倹{date可以是一个DATE字符丌Ӏ一个DATETIME
字符丌Ӏ一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字?br />
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00'/res/images/smilies/wink.gif;
-> 875996580
当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数直接接受|没有隐含?#8220;string-to-unix-timestamp”变换?br />
FROM_UNIXTIME(unix_timestamp)
?YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式q回unix_timestamp参数所表示的|取决于函数是在一个字W串
q是或数字上下文中被使用?br />
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
q回表示 Unix 旉标记的一个字W串Q根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同L(fng)修饰W?br />
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x'/res/images/smilies/wink.gif;
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
q回seconds参数Q变换成时、分钟和U,g'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字W串q是在数?
上下文中被用?br />
mysql> select SEC_TO_TIME(237/res/images/smilies/cool.gif;
-> '00:39:38'
mysql> select SEC_TO_TIME(237/res/images/smilies/cool.gif + 0;
-> 3938
TIME_TO_SEC(time)
q回time参数Q{换成U?br />
mysql> select TIME_TO_SEC('22:23:00'/res/images/smilies/wink.gif;
-> 80580
mysql> select TIME_TO_SEC('00:39:38'/res/images/smilies/wink.gif;
-> 2378
转自: Mysql 日期操作大全
]]>
创徏例子数据库表Q?/span>
CREATE TABLE shop (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY(article, dealer));
INSERT INTO shop VALUES
(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),
(3,'D',1.25),(4,'D',19.95);
好了(jin)Q例子数据是q样的:(x)
SELECT * FROM shop
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
8.3.1 列的最大?/span>
“最大的物品h什么?”
SELECT MAX(article) AS article FROM shop
+---------+
| article |
+---------+
| 4 |
+---------+
8.3.2 拥有某个列的最大值的?/span>
“扑և最늚文章的编受商人和h”
在ANSI-SQL中这很容易用一个子查询做到Q?br />
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop)
在MySQL中(q没有子查询)q2步做刎ͼ(x)
1. 用一个SELECT语句从表中得到最大倹{?br />
2. 使用该值编出实际的查询Q?br />
SELECT article, dealer, price
FROM shop
WHERE price=19.95
另一个解x案是按h(hun)格降序排序所有行q用MySQL特定LIMIT子句只得到的W一行:(x)
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1
注意:如果有多个最늚文章( 例如每个19.95)QLIMIT解决Ҏ(gu)仅仅昄他们之一Q?br />
8.3.3 列的最大|(x)按组Q只有?/span>
“每篇文章的最高的h是什么?”
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article
+---------+-------+
| article | price |
+---------+-------+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+---------+-------+
8.3.4 拥有某个字段的组间最大值的?/span>
“Ҏ(gu)文章,扑և有最늚h的交易者?#8221;
在ANSI SQL中,我可以用q样一个子查询做到Q?br />
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article)
在MySQL中,最好是分几步做刎ͼ(x)
1. 得到一个表(文章Qmaxprice)。见8.3.4 拥有某个域的l间最大值的行?br />
2. Ҏ(gu)文章,得到对应于存储最大h(hun)格的行?br />
q可以很Ҏ(gu)用一个(f)时表做到Q?br />
CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);
LOCK TABLES article read;
INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;
SELECT article, dealer, price FROM shop, tmp
WHERE shop.article=tmp.articel AND shop.price=tmp.price;
UNLOCK TABLES;
DROP TABLE tmp;
如果你不使用一个TEMPORARY表,你也必须锁定“tmp”表?br />
“它能一个单个查询做到吗Q?#8221;
是的Q但是只有用我UC?#8220;MAX-CONCAT诡计”的一个相当低效的诡计Q?br />
SELECT article,
SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
0.00+LEFT( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
FROM shop
GROUP BY article;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+---------+--------+-------+
最后例子当然能通过在客L(fng)序中分割q结的列使它更有效一炏V?br />
8.3.5 使用外键
不需要外键联l?个表?br />
MySQL唯一不做的事情是CHECK以保证你使用的键实在你正在引用表中存在Qƈ且它不自动从有一个外键定义的表中删除行。如果你象^帔R样用你的键|它将工作得很好!
CREATE TABLE persons (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE shirts (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
PRIMARY KEY (id)
);
INSERT INTO persons VALUES (NULL, 'Antonio Paz');
INSERT INTO shirts VALUES
(NULL, 'polo', 'blue', LAST_INSERT_ID()),
(NULL, 'dress', 'white', LAST_INSERT_ID()),
(NULL, 't-shirt', 'blue', LAST_INSERT_ID());
INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska');
INSERT INTO shirts VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());
SELECT * FROM persons;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirts;
+----+---------+--------+-------+
| id | style | color | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+
SELECT s.* FROM persons p, shirts s
WHERE p.name LIKE 'Lilliana%'
AND s.owner = p.id
AND s.color <> 'white';
+----+-------+--------+-------+
| id | style | color | owner |
+----+-------+--------+-------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+----+-------+--------+-------+
转自: mysql常用查询
]]>
提示W?/strong> | 含义 |
mysql> |
准备好接受新命o(h) |
-> |
{待多行命o(h)的下一?/td> |
'> |
{待下一行,攉以单引号(“'”)开始的字符? |
"> |
{待下一行,攉以双引号(“"”)开始的字符?/td> |
EXQ?/span>ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
EX: ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
or ADD INDEX [index_name] (index_col_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
or MODIFY [COLUMN] create_definition
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX index_name
or RENAME [AS] new_tbl_name
or table_options
LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event
装蝲记录
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)
q回日期date的星期烦(ch)?span lang="EN-US">(1=星期天,2=星期一, ……7=星期?span lang="EN-US">)。这些烦(ch)引值对应于ODBC标准?span lang="EN-US">
mysql> select DAYOFWEEK('1998-02-03');
-> 3
WEEKDAY(date)
q回date的星期烦(ch)?span lang="EN-US">(0=星期一Q?span lang="EN-US">1=星期?span lang="EN-US">, ……6= 星期?span lang="EN-US">)?span lang="EN-US">
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
DAYOFMONTH(date)
q回date的月份中日期Q在1?span lang="EN-US">31范围内?span lang="EN-US">
mysql> select DAYOFMONTH('1998-02-03');
-> 3
DAYOFYEAR(date)
q回date在一q中的日?span lang="EN-US">, ?span lang="EN-US">1?span lang="EN-US">366范围内?span lang="EN-US">
mysql> select DAYOFYEAR('1998-02-03');
-> 34
MONTH(date)
q回date的月份,范围1?span lang="EN-US">12?span lang="EN-US">
mysql> select MONTH('1998-02-03');
-> 2
DAYNAME(date)
q回date的星期名字?span lang="EN-US">
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
MONTHNAME(date)
q回date的月份名字?span lang="EN-US">
mysql> select MONTHNAME("1998-02-05");
-> 'February'
QUARTER(date)
q回date一q中的季度,范围1?span lang="EN-US">4?span lang="EN-US">
mysql> select QUARTER('98-04-01');
-> 2
WEEK(date)
WEEK(date,first)
对于星期天是一周的W一天的地方Q有一个单个参敎ͼq回date的周敎ͼ范围?span lang="EN-US">0?span lang="EN-US">52?span lang="EN-US">2个参数Ş?span lang="EN-US">WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数?span lang="EN-US">0Q星期从星期天开始,如果W二个参数是1Q从星期一开始?span lang="EN-US">
mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
YEAR(date)
q回date的年份,范围?span lang="EN-US">1000?span lang="EN-US">9999?span lang="EN-US">
mysql> select YEAR('98-02-03');
-> 1998
HOUR(time)
q回time的小Ӟ范围?span lang="EN-US">0?span lang="EN-US">23?span lang="EN-US">
mysql> select HOUR('10:05:03');
-> 10
MINUTE(time)
q回time的分钟,范围?span lang="EN-US">0?span lang="EN-US">59?span lang="EN-US">
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
SECOND(time)
回来time的秒敎ͼ范围?span lang="EN-US">0?span lang="EN-US">59?span lang="EN-US">
mysql> select SECOND('10:05:03');
-> 3
PERIOD_ADD(P,N)
增加N个月到阶D?span lang="EN-US">PQ以格式YYMM?span lang="EN-US">YYYYMM)。以格式YYYYMMq回倹{注意阶D参?span lang="EN-US">P不是日期倹{?span lang="EN-US">
mysql> select PERIOD_ADD(9801,2);
-> 199803
PERIOD_DIFF(P1,P2)
q回在时?span lang="EN-US">P1?span lang="EN-US">P2之间月数Q?span lang="EN-US">P1?span lang="EN-US">P2应该以格?span lang="EN-US">YYMM?span lang="EN-US">YYYYMM。注意,时期参数P1?span lang="EN-US">P2不是日期倹{?span lang="EN-US">
mysql> select PERIOD_DIFF(9802,199703);
-> 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
q些功能执行日期q算。对?span lang="EN-US">MySQL 3.22Q他们是新的?span lang="EN-US">ADDDATE()?span lang="EN-US">SUBDATE()?span lang="EN-US">DATE_ADD()?span lang="EN-US">DATE_SUB()的同义词?span lang="EN-US">
?span lang="EN-US">MySQL 3.23中,你可以?span lang="EN-US">+?span lang="EN-US">-而不?span lang="EN-US">DATE_ADD()?span lang="EN-US">DATE_SUB()。(见例子)(j)date是一个指定开始日期的
DATETIME?span lang="EN-US">DATE|expr是指定加到开始日期或从开始日期减ȝ间隔g个表辑ּQ?span lang="EN-US">expr是一个字W串Q它可以?span lang="EN-US">
一?span lang="EN-US">“-”开始表C间隔?span lang="EN-US">type是一个关键词Q指明表辑ּ应该如何被解释?span lang="EN-US">EXTRACT(type FROM date)函数从日?span lang="EN-US">
中返?span lang="EN-US">“type”间隔。下表显CZ(jin)type?span lang="EN-US">expr参数怎样被关联:(x) type?含义 期望?span lang="EN-US">expr格式
SECOND U?span lang="EN-US"> SECONDS
MINUTE 分钟 MINUTES
HOUR 旉 HOURS
DAY ?span lang="EN-US"> DAYS
MONTH ?span lang="EN-US"> MONTHS
YEAR q?span lang="EN-US"> YEARS
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
HOUR_MINUTE 时和分?span lang="EN-US"> "HOURS:MINUTES"
DAY_HOUR 天和时 "DAYS HOURS"
YEAR_MONTH q和?span lang="EN-US"> "YEARS-MONTHS"
HOUR_SECOND 时, 分钟Q?span lang="EN-US"> "HOURS:MINUTES:SECONDS"
DAY_MINUTE ?span lang="EN-US">, 时, 分钟 "DAYS HOURS:MINUTES"
DAY_SECOND ?span lang="EN-US">, 时, 分钟, U?span lang="EN-US"> "DAYS HOURS:MINUTES:SECONDS"
MySQL?span lang="EN-US">expr格式中允怓Q何标点分隔符。表C显C的是徏议的分隔W。如?span lang="EN-US">date参数是一?span lang="EN-US">DATE值ƈ且你的计仅仅包?span lang="EN-US">YEAR?span lang="EN-US">MONTH?span lang="EN-US">DAY部分(卻I没有旉部分)Q结果是一?span lang="EN-US">DATE倹{否则结果是一?span lang="EN-US">DATETIME倹{?span lang="EN-US">
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102
如果你指定太短的间隔?span lang="EN-US">(不包?span lang="EN-US">type关键词期望的间隔部分)Q?span lang="EN-US">MySQL假设你省掉了(jin)间隔值的最左面部分。例如,如果你指定一?span lang="EN-US">type?span lang="EN-US">DAY_SECONDQ?span lang="EN-US">expr被希望有天、小时、分钟和U部分。如果你?span lang="EN-US">"1:10"q样指定|MySQL假设日子和小旉分是丢失的ƈ且g表分钟和U。换句话_(d)"1:10" DAY_SECOND以它{h(hun)?span lang="EN-US">"1:10" MINUTE_SECOND的方式解释,q对?span lang="EN-US">MySQL解释TIMEDC经q的旉而非作ؓ(f)一天的旉的方式有二义性。如果你使用实不正的日期Q结果是NULL。如果你增加MONTH?span lang="EN-US">YEAR_MONTH?span lang="EN-US">YEARq且l果日期大于新月份的最大值天敎ͼ日子在新月用最大的天调整?span lang="EN-US">
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
TO_DAYS(date)
l出一个日?span lang="EN-US">date
TO_DAYS()
不打用于用格列高里历(1582)出现前的倹{?span lang="EN-US">
FROM_DAYS(N)
l出一个天?span lang="EN-US">NQ返回一?span lang="EN-US">DATE倹{?span lang="EN-US">
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
DATE_FORMAT(date,format)
Ҏ(gu)format字符串格式化date倹{下列修饰符可以被用?span lang="EN-US">format字符串中Q?span lang="EN-US"> %M 月名?span lang="EN-US">(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前~的月份的日期(1st, 2nd, 3rd, {等。)(j)
%Y q?span lang="EN-US">, 数字, 4 ?span lang="EN-US">
%y q?span lang="EN-US">, 数字, 2 ?span lang="EN-US">
%a ~写的星期名?span lang="EN-US">(Sun……Sat)
%d 月䆾中的天数, 数字(00……31)
%e 月䆾中的天数, 数字(0……31)
%m ?span lang="EN-US">, 数字(01……12)
%c ?span lang="EN-US">, 数字(1……12)
%b ~写的月份名?span lang="EN-US">(Jan……Dec)
%j 一q中的天?span lang="EN-US">(001……366)
%H 时(00……23)
%k 时(0……23)
%h 时(01……12)
%I 时(01……12)
%l 时(1……12)
%i 分钟, 数字(00……59)
%r 旉,12 时(hh:mm:ss [AP]M)
%T 旉,24 时(hh:mm:ss)
%S U?span lang="EN-US">(00……59)
%s U?span lang="EN-US">(00……59)
%p AM?span lang="EN-US">PM
%w 一个星期中的天?span lang="EN-US">(0=Sunday ……6=Saturday Q?span lang="EN-US">
%U 星期(0……52), q里星期天是星期的第一?span lang="EN-US">
%u 星期(0……52), q里星期一是星期的W一?span lang="EN-US">
%% 一个文?span lang="EN-US">“%”?span lang="EN-US">
所有的其他字符不做解释被复制到l果中?span lang="EN-US">
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需?span lang="EN-US">%。在MySQL更早的版本中Q?span lang="EN-US">%是可选的?span lang="EN-US">
TIME_FORMAT(time,format)
q象上面?span lang="EN-US">DATE_FORMAT()函数一样用,但是format字符串只能包含处理小时、分钟和U的那些格式修饰W。其他修饰符产生一?span lang="EN-US">NULL值或0?span lang="EN-US">
CURDATE()
CURRENT_DATE
?span lang="EN-US">'YYYY-MM-DD'?span lang="EN-US">YYYYMMDD格式q回今天日期|取决于函数是在一个字W串q是数字上下文被使用?span lang="EN-US">
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
?span lang="EN-US">'HH:MM:SS'?span lang="EN-US">HHMMSS格式q回当前旉|取决于函数是在一个字W串q是在数字的上下文被使用?span lang="EN-US">
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP
?span lang="EN-US">'YYYY-MM-DD HH:MM:SS'?span lang="EN-US">YYYYMMDDHHMMSS格式q回当前的日期和旉Q取决于函数是在一个字W串q是在数字的上下文被使用?span lang="EN-US">
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用Q返回一?span lang="EN-US">Unix旉戌(?span lang="EN-US">'1970-01-01 00:00:00'GMT开始的U数)。如?span lang="EN-US">UNIX_TIMESTAMP()用一?span lang="EN-US">date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的U数倹{?span lang="EN-US">date可以是一?span lang="EN-US">DATE字符丌Ӏ一?span lang="EN-US">DATETIME字符丌Ӏ一?span lang="EN-US">TIMESTAMP或以YYMMDD?span lang="EN-US">YYYYMMDD格式的本地时间的一个数字?span lang="EN-US">
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
?span lang="EN-US">UNIX_TIMESTAMP被用于一?span lang="EN-US">TIMESTAMP列,函数直接接受|没有隐含?span lang="EN-US">“string-to-unix-timestamp”变换?span lang="EN-US">
FROM_UNIXTIME(unix_timestamp)
?span lang="EN-US">'YYYY-MM-DD HH:MM:SS'?span lang="EN-US">YYYYMMDDHHMMSS格式q回unix_timestamp参数所表示的|取决于函数是在一个字W串q是或数字上下文中被使用?span lang="EN-US">
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
q回表示 Unix 旉标记的一个字W串Q根?span lang="EN-US">format字符串格式化?span lang="EN-US">format可以包含?span lang="EN-US">DATE_FORMAT()函数列出的条目同L(fng)修饰W?span lang="EN-US">
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
q回seconds参数Q变换成时、分钟和U,g'HH:MM:SS'?span lang="EN-US">HHMMSS格式化,取决于函数是在一个字W串q是在数字上下文中被使用?span lang="EN-US">
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
TIME_TO_SEC(time)
q回time参数Q{换成U?span lang="EN-US">
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
Mysql取系l函敎ͼ(x)
Select curtime();
Select curdate():
Select sysdate():
select now();
SUBSTRING_INDEX(str,delim,count)
q回从字W串str的第count个出现的分隔W?/span>delim之后的子丌Ӏ如?/span>count是正敎ͼq回最后的分隔W到左边(从左Ҏ(gu)) 的所有字W。如?/span>count是负敎ͼq回最后的分隔W到双的所有字W?/span>(从右Ҏ(gu))?/span>
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
该函数对多字节是可靠的?/span>
LTRIM(str)
q回删除?jin)其前置I格字符的字W串str?/span>
mysql> select LTRIM(' barbar');
-> 'barbar'
RTRIM(str)
q回删除?jin)其拖后I格字符的字W串str?/span>
mysql> select RTRIM('barbar ');
-> 'barbar'
该函数对多字节是可靠的?/span>
TRIM([[BOTH | LEA
DING | TRAILING] [remstr] FROM] str)
q回字符?/span>strQ其所?/span>remstr前缀或后~被删除了(jin)。如果没有修饰符BOTH?/span>LEADING?/span>TRAILINGl出Q?/span>BOTH被假定。如?/span>remstr没被指定Q空D删除?/span>
mysql> select TRIM(' bar ');
-> 'bar'
mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx'
mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar'
mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'
该函数对多字节是可靠的?/span>
SOUNDEX(str)
q回str的一个同韛_W串。听h“大致相同”?/span>2个字W串应该有相同的同音字符丌Ӏ一?/span>“标准”的同韛_W串长是4个字W,但是SOUNDEX()函数q回一个Q意长的字W串。你可以在结果上使用SUBSTRING()得到一?/span>“标准”?/span> 同音丌Ӏ所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之外的字W国际字母被当作元音?/span>
mysql> select SOUNDEX('Hello');
-> 'H400'
mysql> select SOUNDEX('Quadratically');
-> 'Q36324'
SPACE(N)
q回?/span>N个空格字W组成的一个字W串?/span>
mysql> select SPACE(6);
-> ' '
REPLACE(str,from_str,to_str)
q回字符?/span>strQ其字符?/span>from_str的所有出现由字符?/span>to_str代替?/span>
mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
该函数对多字节是可靠的?/span>
REPEAT(str,count)
q回由重?/span>countTimesơ的字符?/span>strl成的一个字W串。如?/span>count <= 0Q返回一个空字符丌Ӏ如?/span>str?/span>count?/span>NULLQ返?/span>NULL?/span>
mysql> select REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL'
REVERSE(str)
q回颠倒字W顺序的字符?/span>str?/span>
mysql> select REVERSE('abc');
-> 'cba'
该函数对多字节可靠的?/span>
INSERT(str,pos,len,newstr)
q回字符?/span>strQ在位置pos起始的子串且len个字W长得子串由字符?/span>newstr代替?/span>
mysql> select INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic'
该函数对多字节是可靠的?/span>
ELT(N,str1,str2,str3,...)
如果N= 1Q返?/span>str1Q如?/span>N= 2Q返?/span>str2Q等{。如?/span>N于1或大于参C敎ͼq回NULL?/span>ELT()?/span>FIELD()反运?/span>
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
FIELD(str,str1,str2,str3,...)
q回str?/span>str1, str2, str3, ...清单的烦(ch)引。如?/span>str没找刎ͼq回0?/span>FIELD()?/span>ELT()反运?/span>
mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2
mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
FIND_IN_SET(str,strlist)
如果字符?/span>str在由N子串l成的表strlist之中Q返回一?/span>1?/span>N的倹{一个字W串表是?/span>“,”分隔的子串组成的一个字W串。如果第一个参数是一个常数字W串q且W二个参数是一U类型ؓ(f)SET的列Q?/span>FIND_IN_SET()函数被优化而用位q算Q如?/span>str不是?/span>strlist里面或如?/span>strlist是空字符Ԍq回0。如果Q何一个参数是NULLQ返?/span>NULL。如果第一个参数包含一?/span>“,”Q该函数工作不正常?/span>
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
MAKE_SET(bits,str1,str2,...)
q回一个集?/span> (包含?/span>“,”字符分隔的子串组成的一个字W串)Q由相应的位?/span>bits集合中的的字W串l成?/span>str1对应于位0Q?/span>str2对应?/span>1Q等{。在str1, str2, ...中的NULL串不d到结果中?/span>
mysql> SELECT MAKE_SET(1,'a','b','c');
-> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
-> 'hello,world'
mysql> SELECT MAKE_SET(0,'a','b','c');
-> ''
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
q回一个字W串Q在q里对于?/span>“bits”中设定每一位,你得C?/span>“on”字符Ԍq且对于每个复位(reset)的位Q你得到一?/span>“off”字符丌Ӏ每个字W串?/span>“separator”分隔(~省“,”)Qƈ且只?/span>“bits”?/span>“number_of_bits” (~省64)位被使用?/span>
mysql> select EXPORT_SET(5,'Y','N',',',4)
-> Y,N,Y,N
LCASE(str)
LOWER(str)
q回字符?/span>strQ根据当前字W集映射(~省?/span>ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对多字节是可靠的?/span>
mysql> select LCASE('QUADRATICALLY');
-> 'quadratically'
UCASE(str)
UPPER(str)
q回字符?/span>strQ根据当前字W集映射(~省?/span>ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对多字节是可靠的?/span>
mysql> select UCASE('Hej');
-> 'HEJ'
该函数对多字节是可靠的?/span>
LOAD_FILE(file_name)
d文gq且作ؓ(f)一个字W串q回文g内容。文件必d服务器上Q你必须指定到文件的完整路径名,而且你必Lfile权限。文件必L有内定w是可ȝq且于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数q回NULL?/span>
mysql> UPDATE table_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;
MySQL必要时自动变换数字ؓ(f)字符Ԍq且反过来也如此Q?/span>
mysql> SELECT 1+"1";
-> 2
mysql> SELECT CONCAT(2,' test');
-> '2 test'
如果你想要明地变换一个数字到一个字W串Q把它作为参C递到CONCAT()?/span>
如果字符串函数提供一个二q制字符串作为参敎ͼl果字符串也是一个二q制字符丌Ӏ被变换C个字W串的数字被当作是一个二q制字符丌Ӏ这仅媄(jing)响比?/span>