常用命令
● alter add
alter table add <table_name> add <column_name> <data_type>
[约束类型] [first | after 已经存在的字段名]
● rename
alter table <旧表名> rename [to] <新表明>;
● mysqldump
mysqldump -uroot -hlocalhost -P3306 -p123456 dbname [table_name,[table_name]] > filename.sql
操作符优先等级
INTERVAL
BINARY COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
- , / , DIV , % , MOD
-, +
<< , >>
&
|
= (comparsion) , <=>,>=,>,<=,<,<>,!=,is,like,regexp ,in
between ,case , when ,then, else
not
and ,&&
xor
or , ||
= (assignment) , :=
如果想改变优先级执行顺序,则可以使用括号
对比操作符的执行结果为True,false,null
interval() # 代表返回比第一个参数小的参数位置
least() # 代表返回最小的参数
greatest() # 返回最大的值
strcmp() # 对比两个字符串
逻辑操作符,返回1(true),0(false),null
and , &&
not , !
||, or
xor
分配操作符
name description
= assign a value (as part of a set statement,or as part of the set clause in an update statement),其他情况下皆认为是对比操作符
:= assign a value
流程控制函数
name description
case case operator
if() if/else construct
ifnull() null if /else construct
nullif() return null if expr1 = expr2
case语句的用法
case value
when [compare_value] then result
[when [compare_value] then result...] [else result]
end
if的用法
if(expr1,expr2,expr3) # 当expr1为1/true,则返回expr2,否则返回expr3
ifnull的用法
ifnull(expr1,expr2) # 当expr1为null时,返回expr2,否则返回expr1
nullif的用法
nullif(expr1,expr2) # 当expr1等于expr2时,则返回null,否则返回expr1
字符串函数
ascii(str) # 返回字符串中最左边字符的ascii码值,如果是空字符串,则返回0,如果是str是null则返回null
char(N ,...[using charset_name]) # 将括号中的N转化为ASCII对饮的字符,返回这些字符组成的自负床,其中null会被忽略
char_length(str) # 返回字符串的字符长度
concat(str1,str2,...) # 返回括号里所有自负串连接在一起,当其中有null时,则返回null
concat_ws(separator,str1,str2,...) # 返回以第一个参数为分隔符的连接后的一个字符串,当有参数为null时,则null被忽略
GROUP_CONCAT(DISTINCT expression
ORDER BY expression
SEPARATOR sep); # 将分组后的数据按照指定的字符将其进行
insert(str,pos,len,newstr) # 将字符串中从pos位置开始后的len个字符替换成为newstr
instr(str,substr) # 返回字符串中第一个出现substr字符串的位置,如果没有则返回0
left(str,len) # 返回str中从左边开始的len个长度的字符
length(str) # 返回str的字节byte字节长度
load_file(file_name) # 读取文件且返回文件内容为字符串
locate(substr,str) # 返回str中第一次出现substr字符串的位置,如果没有则返回null
locate(substr,str,pos) # 返回str字符串中从pos位置开始第一次出现substr字符串中的位置,如果没有则返回null
lpad(str,len,padstr) # 将str的左边补充为padstr,直到补充成len长度的字符串并返回,如果str的长度比len长,则返回str中最左边开始到len长度的字符
ltrim(str) # 将str左边的空白字符去掉并返回
repeat(str,count) # 将str重复count并组成字符串返回,如果count<1,则返回空串
replace(str,from_str,to_str) # 将所有str中的from_str替换为to_str
reverse(str) # 将str中的字符按照倒序组合并返回
right(str,len)
rpad(str,len,padstr) # 与lpad相反操作
rtrim(str)
space(n) # 返回n个长度的空格组成的空字符串
SUBSTR(str,pos), SUBSTR(str FROM pos), SUBSTR(str,pos,len), SUBSTR(str FROM pos FOR len)
SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)
如果没有len参数,则返回从pos位置开始的str中的子字符串;如果有len参数,则从pos位置开始返回str中长度为len的子字符串;如果pos为负值,则代表pos从右边开始数
SUBSTRING_INDEX(str,delim,count) # 当count为正数,则返回delim出现在str字符串中第count次之前的子字符串,如果是负数,则从右边开始计算
拆分字符串 split,想法,将值按substring_index进行切分,由于参数限制,需要对substring_index的函数进行二次拆分,先正数,后负数即可得到中间值,此过程需要一个自增的字段值,需要通过mysql.help_topic这个表来进行帮助
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(f.split_test, ',', help_topic_id + 1), ',', -1)
FROM (SELECT '2022-02,2022-03,2022-04,2022-05' as split_test ) as f
JOIN mysql.help_topic
ON help_topic_id < LENGTH(f.split_test) - LENGTH(REPLACE(f.split_test, ',' , '')) + 1
数字函数
abs(x) # 返回绝对值
CEILING(X)/CEIL(X) # 返回>=x最小整数
floor(x) # 返回<=x值的最大整数
MOD(N,M), N % M, N MOD M # 取余数操作,返回两者相除之后剩下的余数
RAND([N]) # 获取0到1之间的随机小数,比如当想获取7~12之间的随机整数是可以使用SELECT FLOOR(7 + (RAND() * 5))
ROUND(X), ROUND(X,D) # 四舍五入为D位个小数,当D参数不存在是,则默认为0
TRUNCATE(X,D) # 数字X只保留D位的小数,其余均舍弃
日期和时间函数
ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days) # 当expr为正数时则为增加时间,为负数时则为减少时间,Unit参数可以是任意时间单位
ADDTIME(expr1,expr2) # 将expr2的时间增加到expr1上
CONVERT_TZ(dt,from_tz,to_tz) # 将时间dt从from_tz这个时区转换成to_tz这个时区并返回
CURDATE(), CURRENT_DATE, CURRENT_DATE() # 返回以yyyy-mm-dd或者yyyymmdd格式的当前时间
CURTIME(),CURRENT_TIME,CURRENT_TIME() # 按照hh:mm:ss或者hhmmss格式返回当前时间
Now(), CURRENT_TIMESTAMP,CURRENT_TIMESTAMP() # 返回当前的日期和时间,格式为yyyy-mm-dd hh:mi:ss或者
DATE(expr) # 获取expr中的日期, SELECT DATE('2003-12-31 01:02:03'); 返回 '2003-12-31‘
DATEDIFF(expr1,expr2) # 返回expr1和expr2之间的天数差异,忽略时分秒
DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit) # 增加或者减少时间
DATE_FORMAT(date,format) # 将date日期时间转换成format格式
DAY(date), DAYOFMONTH(date) # 返回date中日期在当前月份中是第几天
DAYNAME(date) # 返回date时间是星期几
DAYOFWEEK(date) # 返回date时间是星期“几”
DAYOFYEAR(date) # 返回date是一年中的第几天,取值范围在1~366
EXTRACT(unit FROM date) # Unit单元和date_add/date_sub函数中的一样,是获取date日期的unit部分
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format) # 根据给定的unixtime,返回yyyy-mm-ddhh:mi:ss或者yyyymmddhhmiss格式的具体时间,或者按照format返回时间
LAST_DAY(date) # 返回date日期所在月份的最后一天日期
SYSDATE() # 返回当前日期和时间,格式为yyyy-mm-ddhh:mi:ss或者yyyymmddhhmiss,和now()函数的区别在于now()返回的时间是语句执行的时间,而sysdate()返回的时间是该函数执行的时间
TIME(expr) # 返回expr日期时间中的时间部分
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) # 如果没有date参数,则返回当前时间到1970-01-01 00:00:00之间的秒数,如果有date参数,则表示date到1970-01-01 00:00:00之间的秒数
STR_TO_DATE(STR,format) ,STR_TO_DATE()根据fmt格式字符串将str字符串转换为日期值
格式转换函数
Cast()和convert()两个函数都可以用来转换数据类型或者转换字符集
允许转换的数据类型包括:
•Binary[N]
•char[N]
•Date
•Datetime
•decimal[M,[D]]
•Time
•Signed [integer]
•Unsigned [integer]
SELECT CONVERT(_latin1'Müller' USING utf8);
SELECT CONVERT('test', CHAR CHARACTER SET utf8);
SELECT CAST('test' AS CHAR CHARACTER SET utf8);
select CAST('2000-01-01' AS DATE);
select CONVERT('2000-01-01', DATE);
聚合函数
AVG([DISTINCT] expr) # 计算expr的平均值,distinct关键词表示是否排除重复值
COUNT(expr) # 计算expr中的个数,如果没有匹配则返回0,注意NULL的区别
COUNT(DISTINCT expr,[expr...]) # 计算有多少个不重复的expr值,注意是计算非NULL的个数
MAX([DISTINCT] expr),MIN([DISTINCT] expr) # 返回expr中最大或者最小的值
SUM([DISTINCT] expr) # 返回expr的求和值
标签:返回,常用,函数,expr,len,字符串,str,MySQL,date From: https://www.cnblogs.com/shuiyirar/p/18610580