1.查询结果运算:计算百分比
concat(cast((CompletedQuantity/(ScrappedQuantity+CompletedQuantity))*100 as decimal),'%')
2.null函数:
isnull(expr)
如expr为null,那么isnull()的返回值为1,否则返回值为0;
ifnull(expr1,expr2)
假如expr1不为NULL,则IFNULL()的返回值为expr1; 否则其返回值为expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境;
nullif(expr1,expr2)
如果expr1=expr2成立,那么返回值为NULL,否则返回值为expr1。这和
CASE WHEN expr1=expr2 THEN NULL
ELSE
expr1
END 相同。
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值
3.连接函数:
concat(str1,str2,…)
返回结果为连接参数产生的字符串。
注意:
MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL;Oracle只能连接2个,多个使用 || 代替concat函数
concat_ws函数
contcat_ws() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
注意:
如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值;和concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL而是把null值省略
group_concat函数
完整的语法:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
例如:以id分组,把name字段的值打印在一行,逗号分隔(默认)
select id,group_concat(name) from aa group by id;
4.复制函数:
用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数
select repeat('ab',2);
5.条件范围函数:
FIND_IN_SET(str,strlist)
假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
如果strlist是常量,则可以直接用IN, 否则要用find_in_set()函数。
6.日期格式转换函数:
DATE_FORMAT(date,format)————–>oracle中的to_char();
str_to_date(date,format)————–>oracle中的to_date();
ADD_MONTHS
增加或减去月份
MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份
格式 | 描述 |
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-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 | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
计算函数
MOD(n1,n2)
返回一个n1除以n2的余数 ;
ABS
返回指定值的绝对值 ;
ACOS
给出反余弦的值 ;
ASIN
给出反正弦的值;
ATAN
返回一个数字的反正切值 ;
CEIL
返回大于或等于给出数字的最小整数;
COS
返回一个给定数字的余弦;
EXP
返回一个数字e的n次方根 ;
FLOOR
对给定的数字取整数;
LN -----以e为底的对数
返回一个数字的对数值;
LOG(n1,n2)
返回一个以n1为底n2的对数 ;
POWER
返回n1的n2次方根;
SIGN
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 ;
SIN
返回一个数字的正弦值;
TAN
返回数字的正切值 ;
TANH
返回数字n的双曲正切值 ;
SQRT
返回数字n的根
查询日期所在周、月起始
mysql查询某周的起始日期和终止日期
subdate(curdate(),date_format(curdate(),'%w')-1)
subdate(curdate(),date_format(curdate(),'%w')-7)
查询周起止日期
DATE_ADD( '2019-11-12', INTERVAL - WEEKDAY ( '2019-11-12' ) DAY ) week_begin,
DATE_ADD( '2019-11-12', INTERVAL - WEEKDAY ( '2019-11-12' ) + 7 DAY ) week_end
查询月起止日期
DATE_ADD( '2019-11-12', INTERVAL - DAY ( '2019-11-12' ) + 1 DAY ) month_begin,
DATE_ADD( LAST_DAY( '2019-11-12' ), INTERVAL + 1 DAY ) month_end
查询年起止日期
DATE_ADD( '2019-11-12', INTERVAL - DAYOFYEAR ( '2019-11-12' ) + 1 DAY ) year_begin,
DATE_ADD( DATE_ADD( '2019-11-12', INTERVAL - DAYOFYEAR ( '2019-11-12' ) + 1 DAY ), INTERVAL + 1 YEAR ) year_end
查询当前时间是今年的第几天、周、季
DAYOFYEAR ( '20191112' ) 'day',
WEEK ( '20191112', 1 ) week1,
WEEKOFYEAR( '20191112' ) week2,
QUARTER ( '20191112' ) qtr,
floor( substr( '20191112', 5, 2 )/ 3.1 )+ 1 qtr2
DATE_ADD() 函数向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type可以使用的类型
MICROSECOND |
SECOND |
MINUTE |
HOUR |
DAY |
WEEK |
MONTH |
QUARTER |
YEAR |
SECOND_MICROSECOND |
MINUTE_MICROSECOND |
MINUTE_SECOND |
HOUR_MICROSECOND |
HOUR_SECOND |
HOUR_MINUTE |
DAY_MICROSECOND |
DAY_SECOND |
DAY_MINUTE |
DAY_HOUR |
YEAR_MONTH |