最近一直挺忙的,项目要从mssql转到MySQL,从来没接触过MySQL,花费了几天时间看初入教程,今天下班早点,将一些知识点记下,增加印象,也方便以后查阅。
首先是MySQL的一个sql分页。
1 USE jinriyou; 2 3 SET @START=(@PageIndex-1)*@PageSize; 4 PREPARE mysql FROM 'SELECT * FROM userlogin WHERE (? IS NULL OR LoginName=?) AND (? IS NULL OR UserID = ?) ORDER BY InsertDate DESC LIMIT ?, ?'; 5 PREPARE counts FROM 'SELECT COUNT(UserID) FROM userlogin'; 6 EXECUTE mysql USING @UserName,@UserName,@UserID,@UserID,@START,@PageSize; 7 EXECUTE counts
mysql的存储过程.
1 /* 2 基本语法 3 create procedure sp_name([proc_parameter]) 4 [characterstics ...] routine_body 5 IN:表示输入参数 6 OUT:表示输出参数 7 intout:表示既可输入也可输出 8 */ 9 USE db_zcy; 10 11 DELIMITER $$ 12 DROP PROCEDURE IF EXISTS `AvgFruitPrice` $$ -- 判断存储过程是否存在,存在则删除 13 CREATE PROCEDURE `db_zcy`.`AvgFruitPrice` () 14 BEGIN 15 SELECT 16 AVG(f_price) AS avgprice 17 FROM 18 fruits ; 19 END $$ 20 DELIMITER ; 21 22 CALL AvgFruitPrice(); 23 24 25 DELIMITER // 26 DROP PROCEDURE IF EXISTS `Fruits` // -- 判断存储过程是否存在,存在则删除 27 CREATE PROCEDURE `db_zcy`.`Fruits` () 28 BEGIN 29 SELECT 30 * 31 FROM 32 fruits ; 33 END // 34 DELIMITER ; 35 36 CALL Fruits(); 37 /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ 38 39 40 /* 41 基本语法 42 create function func_name([func_parameter]) 43 returns type 44 [characterstics ...] routine_body 45 IN:表示输入参数 46 OUT:表示输出参数 47 intout:表示既可输入也可输出 48 */ 49 50 DELIMITER $$ 51 DROP FUNCTION IF EXISTS `NameByZip` $$ 52 CREATE 53 FUNCTION `db_zcy`.`NameByZip`() 54 RETURNS CHAR(50) 55 BEGIN 56 RETURN (SELECT f_name FROM fruits WHERE f_id='t1'); 57 END $$ 58 DELIMITER ; 59 60 /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ 61 62 -- 定义条件 63 /* 64 declare condition_name condition for [condition_type] 65 66 [condition_type]: 67 sqlstate[value] sqlstate_value | mysql_error_code 68 condition_name:条件名称 69 condition_type:条件类型 70 */ 71 72 DECLARE command_not_allowed CONDITION FOR SQLSTATE'42000'; 73 DECLARE command_not_allowed CONDITION FOR 1148; 74 75 /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ 76 77 -- 定义处理程序 78 /* 79 declare handler_type HANDLER FOR condition_value[...] sp_statement 80 handler_type:CONTINUE|EXIT|UNDO 81 82 condition_value:SQLSTATE[VALUE] sqlstate_value 83 condition_value: 84 SQLSTATE[VALUE] sqlstate_value:包含5个字符的字符串错误值 85 condition:表示DECLARE CONDITION定义的错误条件名称 86 SQLWARNING:匹配所有以01开头的SQLSTATE错误代码 87 NOT FOUND:匹配所有以02开头的SQLSTATE错误代码 88 SQLEXCEPTION:匹配所有没被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码 89 mysql_error_code:匹配数值类型错误代码 90 */ 91 DECLARE @info CHAR(100) 92 -- 方法一 捕获sqlstate_value: 93 DECLARE CONDITION HANDLER FOR SQLSTATE'42S02' SET @info='NO_SUCH_TANLE'; 94 -- 方法二 捕获mysql_error_code: 95 DECLARE CONDITION HANDLER FOR 1146 SET @info='NO_SUCH_TANLE'; 96 -- 方法三 先定义条件,然后调用: 97 DECLARE no_such_table CONDITION FOR 1146; 98 DECLARE CONDITION HANDLER FOR NO_SUCH_TABLE SET @info='NO_SUCH_TANLE'; 99 -- 方法四 使用SQLWARNING 100 DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR'; 101 -- 方法五 使用NOT FOUND 102 DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TANLE'; 103 -- 方法六 使用SQLEXCEPTION 104 DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR'; 105 106 DELIMITER $$ 107 DROP PROCEDURE IF EXISTS `handlerdemo` $$ 108 CREATE PROCEDURE `db_zcy`.`handlerdemo`() 109 BEGIN 110 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1; 111 SET @x=1; 112 INSERT INTO test(t) VALUES(1); 113 SET @x=2; 114 INSERT INTO test(t) VALUES(2); 115 SET @x=3; 116 END $$ 117 DELIMITER ; 118 119 CALL handlerdemo(); 120 SELECT @x; 121 122 123 124 125 /*------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ 126 /* 127 128 */ 129 130 IF val IS NULL 131 THEN SELECT 'val is null' AS result; 132 ELSE 133 SELECT 'val is not null' AS result; 134 END IF ; 135 136 137 -- 产看存储过程和函数信息 138 SELECT * FROM information_schema.`ROUTINES`
mysql 视图
1 /* 2 视图可以进行增删改查,且在视图中增删改之后,对应的表也会进行当前操作 3 4 create[or replace] [algorithm]={undefined|merge|temptable} 5 view view_name[(column_list)] 6 as select_statement 7 [with[cascaded|local]check option] 8 create[or replace]:创建或者替换试图 9 algorithm:选择算法 10 */ 11 USE db_zcy; 12 13 CREATE TABLE t(quantity INT,price INT); 14 15 INSERT INTO t VALUES(3,50); 16 17 SELECT * FROM t; 18 19 -- 单表试图 20 CREATE OR REPLACE VIEW view_t(qty,price,total) AS 21 SELECT 22 quantity, 23 price, 24 quantity * price 25 FROM 26 t ; 27 28 SELECT * FROM view_t; 29 /*----------------------------------------------------------------------------------------------------------------------------------------*/ 30 CREATE TABLE student(s_id INT,NAME VARCHAR(40)); 31 CREATE TABLE stu_info(s_id INT,glass VARCHAR(40),addr VARCHAR(90)); 32 33 INSERT INTO student VALUES(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai'); 34 INSERT INTO stu_info VALUES(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shangdong'); 35 36 SELECT * FROM stu_info; 37 SELECT * FROM student; 38 39 40 CREATE OR REPLACE VIEW stu_glass (id, NAME, glass) AS 41 SELECT 42 student.`s_id`, 43 student.`name`, 44 stu_info.`glass` 45 FROM 46 student, 47 stu_info 48 WHERE student.`s_id` = stu_info.`s_id` 49 50 SELECT * FROM stu_glass 51 /*------------------------------------------------------------查看视图----------------------------------------------------------------------------*/ 52 -- 字段详细信息 53 DESCRIBE stu_glass 54 -- 视图基本信息 55 SHOW TABLE STATUS WHERE NAME LIKE 'stu_glass'; 56 -- 视图详细信息 57 SHOW CREATE VIEW stu_glass; 58 SELECT * FROM information_schema.`VIEWS`;
mysql函数
1 #字符串函数 2 #1. ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) 3 SELECT ASCII('2'); 4 #2.ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。如果是一个多字节字符,以格式返回((first byte ASCII code) 5 SELECT ORD('2'); 6 #3.CONV(N,from_base,to_base)对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则作无符号数,CONV以64位点精度工作) 7 SELECT CONV("a",16,2); 8 SELECT CONV("6E",18,8); 9 SELECT CONV(-17,10,-18); 10 SELECT CONV(10+"10"+'10'+0XA,10,10); 11 #4.BIN(N)把N转为二进制值并以字串返回 12 SELECT OCT(12); 13 #5.HEX(N)把N转为十六进制并以字串返回 14 SELECT HEX(255); 15 #6.CHAR(N,...)返回由参数N,...对应的ASCII代码字符组成的一个字串(参数是N,...是数字序列,NULL值被跳过) 16 SELECT CHAR(77,121,83,81,'76'); 17 #7.CONCAT(str1,str2,...)把参数连成一个长字符串并返回(任何参数是NULL时返回NULL) 18 SELECT CONCAT('My', 'S', 'QL'); 19 #8.LENGTH(str)、OCTET_LENGTH(str)、CHAR_LENGTH(str)、CHARACTER_LENGTH(str) 返回字符串str的长度(对于多字节字符CHAR_LENGTH仅计算一次) 20 SELECT LENGTH('text'); 21 SELECT OCTET_LENGTH('text'); 22 #9.LOCATE(substr,str) 、POSITION(substr IN str) 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0) 23 SELECT LOCATE('bar', 'foobarbar'); 24 #10.LOCATE(substr,str,pos) 返回字符串substr在字符串str的第pos个位置起第一次出现的位置(str不包含substr时返回0) 25 SELECT LOCATE('bar', 'foobarbar',2); 26 SELECT LOCATE('bar', 'foobarbar',5); 27 #11.INSTR(str,substr) 返回字符串substr在字符串str第一次出现的位置(str不包含substr时返回0) 28 SELECT INSTR('foobarbar', 'bar'); 29 #12.LPAD(str,len,padstr) 用字符串padstr填补str左端直到字串长度为len并返回 30 SELECT LPAD('hi',4,'??'); 31 #13.RPAD(str,len,padstr) 用字符串padstr填补str右端直到字串长度为len并返回 32 SELECT RPAD('hi',5,'?'); 33 #14.LEFT(str,len) 返回字符串str的左端len个字符 34 SELECT LEFT('foobarbar', 5); 35 #15.RIGHT(str,len) 返回字符串str的右端len个字符 36 SELECT RIGHT('foobarbar', 4); 37 #16.SUBSTRING(str,pos,len)、SUBSTRING(str FROM pos FOR len) 、 MID(str,pos,len) 返回字符串str的位置pos起len个字符 38 SELECT SUBSTRING('Quadratically',5,6); 39 SELECT SUBSTRING('Quadratically',5); 40 SELECT SUBSTRING('foobarbar' FROM 4); 41 #17.SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串(count为正数时返回左端,否则返回右端子串) 42 SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); 43 SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); 44 #18.LTRIM(str) 返回删除了左空格的字符串str 45 SELECT LTRIM(' barbar'); 46 #19.RTRIM(str) 返回删除了右空格的字符串str 47 SELECT RTRIM('barbar '); 48 #20.TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) 返回前缀或后缀remstr被删除了的字符串str(位置参数默认BOTH,remstr默认值为空格) 49 SELECT TRIM(' bar '); 50 SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); 51 SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); 52 SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); 53 #21.SOUNDEX(str) 返回str的一个同音字符串(听起来“大致相同”字符串有相同的同音字符串,非数字字母字符被忽略,在A-Z外的字母被当作元音) 54 SELECT SOUNDEX('Hello'); 55 SELECT SOUNDEX('Quadratically'); 56 #22.SPACE(N) 返回由N个空格字符组成的一个字符串 57 SELECT SPACE(6); 58 #23.REPLACE(str,from_str,to_str) 用字符串to_str替换字符串str中的子串from_str并返回 59 SELECT REPLACE('www.mysql.com', 'w', 'W'); 60 #24.REPEAT(str,count) 返回由count个字符串str连成的一个字符串(任何参数为NULL时返回NULL,count<=0时返回一个空字符串) 61 SELECT REPEAT('MySQL', 3); 62 #25.REVERSE(str) 颠倒字符串str的字符顺序并返回 63 SELECT REVERSE('abc'); 64 #26.INSERT(str,pos,len,newstr) 把字符串str由位置pos起len个字符长的子串替换为字符串newstr并返回 65 SELECT INSERT('Quadratic', 3, 4, 'What'); 66 #27.ELT(N,str1,str2,str3,...) 返回第N个字符串(N小于1或大于参数个数返回NULL) 67 SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo'); 68 SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo'); 69 #28.FIELD(str,str1,str2,str3,...) 返回str等于其后的第N个字符串的序号(如果str没找到返回0) 70 SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej','foo'); 71 SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej','foo'); 72 #29.FIND_IN_SET(str,strlist) 返回str在字符串集strlist中的序号(任何参数是NULL则返回NULL,如果str没找到返回0,参数1包含","时工作异常) 73 SELECT FIND_IN_SET('b','a,b,c,d'); 74 #30.MAKE_SET(bits,str1,str2,...) 把参数1的数字转为二进制,假如某个位置的二进制位等于1,对应位置的字串选入字串集并返回(NULL串不添加到结果中) 75 SELECT MAKE_SET(1,'a','b','c'); 76 SELECT MAKE_SET(1 | 4,'hello','nice','world'); 77 SELECT MAKE_SET(0,'a','b','c'); 78 #31.EXPORT_SET(bits,on,off,[separator,[number_of_bits]]) 按bits排列字符串集,只有当位等于1时插入字串on,否则插入off(separator默认值",",number_of_bits参数使用时长度不足补0而过长截断) 79 SELECT EXPORT_SET(5,'Y','N',',',4); 80 #32.LCASE(str) LOWER(str) 返回小写的字符串str 81 SELECT LCASE('QUADRATICALLY'); 82 #33.UCASE(str) UPPER(str) 返回大写的字符串str 83 SELECT UCASE('quadratically'); 84 #34.LOAD_FILE(file_name) 读入文件并且作为一个字符串返回文件内容(文件无法找到,路径不完整,没有权限,长度大于max_allowed_packet会返回NULL) 85 UPDATE table_name SET blob_column=LOAD_FILE("/tmp/picture") WHERE id=1; 86 87 #数学函数 88 #1.ABS(N) 返回N的绝对值 89 SELECT ABS(2); 90 SELECT ABS(-32); 91 #2.SIGN(N) 返回参数的符号(为-1、0或1) 92 SELECT SIGN(-32); 93 SELECT SIGN(0); 94 SELECT SIGN(234); 95 #3.MOD(N,M) 取模运算,返回N被M除的余数(同%操作符) 96 SELECT MOD(234, 10); 97 SELECT 234 % 10; 98 SELECT MOD(29,9); 99 #4.FLOOR(N) 返回不大于N的最大整数值 100 SELECT FLOOR(1.23); 101 SELECT FLOOR(-1.23); 102 #5。CEILING(N) 返回不小于N的最小整数值 103 SELECT CEILING(1.23); 104 SELECT CEILING(-1.23); 105 #6.ROUND(N,D) 返回N的四舍五入值,保留D位小数(D的默认值为0) 106 SELECT ROUND(-1.23); 107 SELECT ROUND(-1.58); 108 SELECT ROUND(1.58); 109 SELECT ROUND(1.298, 1); 110 SELECT ROUND(1.298, 0); 111 #7.EXP(N) 返回值e的N次方(自然对数的底) 112 SELECT EXP(2); 113 SELECT EXP(-2); 114 #8.LOG(N) 返回N的自然对数 115 SELECT LOG(2); 116 SELECT LOG(-2); 117 #10.LOG10(N) 返回N以10为底的对数 118 SELECT LOG10(2); 119 SELECT LOG10(100); 120 SELECT LOG10(-100); 121 #11.POW(X,Y) POWER(X,Y) 返回值X的Y次幂 122 SELECT POW(2,2); 123 SELECT POW(2,-2); 124 #12.SQRT(N) 返回非负数N的平方根 125 SELECT SQRT(4); 126 SELECT SQRT(20); 127 #13PI() 返回圆周率 128 SELECT PI(); 129 #14.COS(N) 返回N的余弦值 130 SELECT COS(PI()); 131 #15.SIN(N) 返回N的正弦值 132 SELECT SIN(PI()); 133 #16.TAN(N) 返回N的正切值 134 SELECT TAN(PI()+1); 135 #17.ACOS(N) 返回N反余弦(N是余弦值,在-1到1的范围,否则返回NULL) 136 SELECT ACOS(1); 137 SELECT ACOS(1.0001); 138 SELECT ACOS(0); 139 #18.ASIN(N) 返回N反正弦值 140 SELECT ASIN(0.2); 141 SELECT ASIN('foo'); 142 #19.ATAN(N) 返回N的反正切值 143 SELECT ATAN(2); 144 SELECT ATAN(-2); 145 #20.ATAN2(X,Y) 返回2个变量X和Y的反正切(类似Y/X的反正切,符号决定象限) 146 SELECT ATAN(-2,2); 147 SELECT ATAN(PI(),0); 148 #21.COT(N) 返回X的余切 149 SELECT COT(12); 150 SELECT COT(0); 151 #22.RAND() RAND(N) 返回在范围0到1.0内的随机浮点值(可以使用数字N作为初始值) 152 SELECT RAND(); 153 SELECT RAND(20); 154 SELECT RAND(20); 155 SELECT RAND(); 156 SELECT RAND(); 157 #23.DEGREES(N) 把N从弧度变换为角度并返回 158 SELECT DEGREES(PI()); 159 #24.RADIANS(N) 把N从角度变换为弧度并返回 160 SELECT RADIANS(90); 161 #25.TRUNCATE(N,D) 保留数字N的D位小数并返回 162 SELECT TRUNCATE(1.223,1); 163 SELECT TRUNCATE(1.999,1); 164 SELECT TRUNCATE(1.999,0); 165 #26.LEAST(X,Y,...) 返回最小值(如果返回值被用在整数(实数或大小敏感字串)上下文或所有参数都是整数(实数或大小敏感字串)则他们作为整数(实数或大小敏感字串)比较,否则按忽略大小写的字符串被比较) 166 SELECT LEAST(2,0); 167 SELECT LEAST(34.0,3.0,5.0,767.0); 168 SELECT LEAST("B","A","C"); 169 #27.GREATEST(X,Y,...) 返回最大值(其余同LEAST()) 170 SELECT GREATEST(2,0); 171 SELECT GREATEST(34.0,3.0,5.0,767.0); 172 SELECT GREATEST("B","A","C"); 173 174 #时期时间函数 175 #1.DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准) 176 SELECT DAYOFWEEK('1998-02-03'); 177 #2.WEEKDAY(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 178 SELECT WEEKDAY('1997-10-04 22:23:00'); 179 SELECT WEEKDAY('1997-11-05'); 180 #3.DAYOFMONTH(date) 返回date是一月中的第几日(在1到31范围内) 181 SELECT DAYOFMONTH('1998-02-03'); 182 #4.DAYOFYEAR(date) 返回date是一年中的第几日(在1到366范围内) 183 SELECT DAYOFYEAR('1998-02-03'); 184 #5.MONTH(date) 返回date中的月份数值 185 SELECT MONTH('1998-02-03'); 186 #6.DAYNAME(date) 返回date是星期几(按英文名返回) 187 SELECT DAYNAME("1998-02-05"); 188 #7.MONTHNAME(date) 返回date是几月(按英文名返回) 189 SELECT MONTHNAME("1998-02-05"); 190 #8.QUARTER(date) 返回date是一年的第几个季度 191 SELECT QUARTER('98-04-01'); 192 #9.WEEK(date,first) 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始) 193 SELECT WEEK('1998-02-20'); 194 SELECT WEEK('1998-02-20',0); 195 SELECT WEEK('1998-02-20',1); 196 #10.YEAR(date) 返回date的年份(范围在1000到9999) 197 SELECT YEAR('98-02-03'); 198 #11.HOUR(time) 返回time的小时数(范围是0到23) 199 SELECT HOUR('10:05:03'); 200 #12.MINUTE(time) 返回time的分钟数(范围是0到59) 201 SELECT MINUTE('98-02-03 10:05:03'); 202 #13.SECOND(time) 返回time的秒数(范围是0到59) 203 SELECT SECOND('10:05:03'); 204 #14.PERIOD_ADD(P,N) 增加N个月到时期P并返回(P的格式YYMM或YYYYMM) 205 SELECT PERIOD_ADD(9801,2); 206 #15.PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM) 207 SELECT PERIOD_DIFF(9802,199703); 208 /*16.DATE_ADD(date,INTERVAL expr type) 209 DATE_SUB(date,INTERVAL expr type) 210 ADDDATE(date,INTERVAL expr type) 211 SUBDATE(date,INTERVAL expr type) 212 对日期时间进行加减法运算 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符+和-而不是函数 213 date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释 214 [type值 含义 期望的expr格式]: 215 SECOND 秒 SECONDS 216 MINUTE 分钟 MINUTES 217 HOUR 时间 HOURS 218 DAY 天 DAYS 219 MONTH 月 MONTHS 220 YEAR 年 YEARS 221 MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS" 222 HOUR_MINUTE 小时和分钟 "HOURS:MINUTES" 223 DAY_HOUR 天和小时 "DAYS HOURS" 224 YEAR_MONTH 年和月 "YEARS-MONTHS" 225 HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS" 226 DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES" 227 DAY_SECOND 天, 小时, 分钟, 秒 "DAYSHOURS:MINUTES:SECONDS" 228 expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个 229 DATE值,否则结果是一个DATETIME值) 230 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND) 231 如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天 232 数则使用最大天数)*/ 233 SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; 234 SELECT INTERVAL 1 DAY + "1997-12-31"; 235 SELECT "1998-01-01" - INTERVAL 1 SECOND; 236 SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND); 237 SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY); 238 SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND); 239 SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "11:1:1" DAY_SECOND); 240 SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-110" DAY_HOUR); 241 SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY); 242 SELECT EXTRACT(YEAR FROM "1999-07-02"); 243 SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03"); 244 SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03"); 245 #17.TO_DAYS(date) 返回日期date是西元0年至今多少天(不计算1582年以前) 246 SELECT TO_DAYS(950501); 247 SELECT TO_DAYS('1997-10-07'); 248 #18.FROM_DAYS(N) 给出西元0年至今多少天返回DATE值(不计算1582年以前) 249 SELECT FROM_DAYS(729669); 250 /*19.DATE_FORMAT(date,format) 根据format字符串格式化date值 (在format字符串中可用标志符: 251 %M 月名字(January……December) 252 %W 星期名字(Sunday……Saturday) 253 %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) 254 %Y 年, 数字, 4 位 255 %y 年, 数字, 2 位 256 %a 缩写的星期名字(Sun……Sat) 257 %d 月份中的天数, 数字(00……31) 258 %e 月份中的天数, 数字(0……31) 259 %m 月, 数字(01……12) 260 %c 月, 数字(1……12) 261 %b 缩写的月份名字(Jan……Dec) 262 %j 一年中的天数(001……366) 263 %H 小时(00……23) 264 %k 小时(0……23) 265 %h 小时(01……12) 266 %I 小时(01……12) 267 %l 小时(1……12) 268 %i 分钟, 数字(00……59) 269 %r 时间,12 小时(hh:mm:ss [AP]M) 270 %T 时间,24 小时(hh:mm:ss) 271 %S 秒(00……59) 272 %s 秒(00……59) 273 %p AM或PM 274 %w 一个星期中的天数(0=Sunday ……6=Saturday ) 275 %U 星期(0……52), 这里星期天是星期的第一天 276 %u 星期(0……52), 这里星期一是星期的第一天 277 %% 字符% ) */ 278 SELECT DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y'); 279 SELECT DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s'); 280 SELECT DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j'); 281 SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w'); 282 #20.TIME_FORMAT(time,format) 和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0) 283 #21.CURDATE() CURRENT_DATE() 以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字) 284 SELECT CURDATE(); 285 SELECT CURDATE() + 0; 286 #22.CURTIME() CURRENT_TIME() 以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字) 287 SELECT CURTIME(); 288 SELECT CURTIME() + 0; 289 #23.NOW() SYSDATE() CURRENT_TIMESTAMP() 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字) 290 SELECT NOW(); 291 SELECT NOW() + 0; 292 #24.UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间) 293 SELECT UNIX_TIMESTAMP(); 294 SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); 295 #25.FROM_UNIXTIME(unix_timestamp) 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字) 296 SELECT FROM_UNIXTIME(875996580); 297 SELECT FROM_UNIXTIME(875996580) + 0; 298 #26.FROM_UNIXTIME(unix_timestamp,format) 以format字符串格式返回时间戳的值 299 SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x'); 300 #27.SEC_TO_TIME(seconds) 以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字) 301 SELECT SEC_TO_TIME(2378); 302 SELECT SEC_TO_TIME(2378) + 0; 303 #28.TIME_TO_SEC(time) 返回time值有多少秒 304 SELECT TIME_TO_SEC('22:23:00'); 305 SELECT TIME_TO_SEC('00:39:38'); 306 307 308 #转换函数 309 #1.cast 用法:cast(字段 as 数据类型) [当然是否可以成功转换,还要看数据类型强制转化时注意的问题] 310 SELECT CAST(a AS UNSIGNED) AS b FROM cardserver WHERE ORDER BY b DESC; 311 #2.convert:convert(字段,数据类型) 312 SELECT CONVERT(a ,UNSIGNED) AS b FROM cardserver WHERE ORDER BY b DESC;