7. 数值函数

简介: 7. 数值函数

举出了一部份常用的,遇到不会的再上网搜就可以

常用的数值函数

sql

复制代码

- ROUND(double,num)     -- 下取整,保留几位小数
- CEILING(double,num)   -- 上取整,保留几位小数
- FLOOR(double)         -- 下取整
- ABS(double)           -- 绝对值
- RAND()                -- 返回介于0-1的随机数

MySQL数值函数 - MySQL教程 (yiibai.com)

字符串函数

sql

复制代码

- LENGTH(string)        -- 返回字符串长度
- UPPER(string)     -- 转换字符串为大写
- LOWER(string)     -- 转换字符串为小写
- LTRIM(string)     -- 移除出字符串左侧的空格
- RTRIM(string)     -- 移除字符串右侧的空格
- TRIM(string)      -- 移除字符串前后的空格
- LEFT(string,num)    -- 得到字符串前num个字符
- RIGHT(string,num)   -- 移除字符串后num个字符
- SUBSTRING(string,start,lenth) -- c++中的同样用法
- LOCATE(string,string) -- 无视大小写,在右边字符串找到以一个匹配左边字符串的下标(用1开始,没找的返回0)
- REPLACE(string,string,string) -- 替换第2个字符为第3个
- CONCAT(string,string,...) -- 连接多个字符串

日期函数

sql

复制代码

- NOW()
- CURDATE()
- CURTIME()
- YEAR(time)
- MONTH(time)
- DAY(time)
- HOUR(time)
- MINUTE(time)
- DAYNAME(time)
- MONTHNAME(time)
SELECT EXTRACT(YEAR FROM NOW())

日期函数可以让查询更简洁,更易读

sql

复制代码

USE sql_store;
SELECT * 
FROM orders
WHERE YEAR(order_date) = YEAR(now())

日期格式化

sql

复制代码

SELECT DATE_FORMAT(NOW(), '%M %d, %Y')  -- September 12, 2020
SELECT TIME_FORMAT(NOW(), '%H:%i %p')  -- 11:07 AM

格式说明符里,大小写是不同的,这是目前SQL里第一次出现大小写不同的情况

计算日期和格式化

有时需要对日期事件对象进行运算,如增加一天或算两个时间的差值之类,介绍一些最有用的日期时间计算函数:

  1. DATE_ADD, DATE_SUB
  2. DATEDIFF
  3. TIME_TO_SEC

增加或减少一定的天数、月数、年数、小时数等等

sql

复制代码

SELECT DATE_ADD(NOW(), INTERVAL -1 DAY)
SELECT DATE_SUB(NOW(), INTERVAL 1 YEAR)
SELECT DATE_DIFF(NOW(), '2019-01-01 09:00')
SELECT TIME_TO_SEC('09:00') - TIME_TO_SEC('09:02')    -- -120

IFNULL和COALESCE

sql

复制代码

USE sql_store;
SELECT 
    order_id,
    IFNULL(shipper_id, 'Not Assigned') AS shipper
    /* If expr1 is not NULL, IFNULL() returns expr1; 
    otherwise it returns expr2. */
FROM orders

将 orders 里 shipper.id 中的空值替换为 comments,若 comments 也为空则替换为 'Not Assigned'(未分配)

sql

复制代码

USE sql_store;
SELECT 
    order_id,
    COALESCE(shipper_id, comments, 'Not Assigned') AS shipper
    /* Returns the first non-NULL value in the list, 
    or NULL if there are no non-NULLvalues. */
FROM orders

COALESCE 函数是返回一系列值中的首个非空值,更灵活 (coalesce vi. 合并;结合;联合)

IF函数

根据是否满足条件表达式返回不同的值:

IF(条件表达式, 返回值1, 返回值2) 返回值可以是任何东西,数值 文本 日期时间 空值null

sql

复制代码

USE sql_store;
SELECT 
    *,
    IF(YEAR(order_date) = YEAR(NOW()),
       'Active',
       'Archived') AS category
FROM orders

CASE

当分类多余两种时,可以用IF嵌套,也可以用CASE语句,后者可读性更好

CASE语句结构:

sql

复制代码

CASE 
    WHEN …… THEN ……
    WHEN …… THEN ……
    WHEN …… THEN ……
    ……
    [ELSE ……] (ELSE子句是可选的)
END

sql

复制代码

USE sql_store;
SELECT
    order_id,
    CASE
        WHEN YEAR(order_date) = YEAR(NOW()) THEN 'Active'
        WHEN YEAR(order_date) = YEAR(NOW()) - 1 THEN 'Last Year'
        WHEN YEAR(order_date) < YEAR(NOW()) - 1 THEN 'Archived'
        ELSE 'Future'  
    END AS 'category'
FROM orders

ELSE 'Future' 是可选的,实验发现若分类不完整,比如只写了今年和去年的两个分类条件,则不在这两个分类的记录的 category 字段会是 null.


相关文章
|
机器学习/深度学习 Windows
解决R语言出现“二进列运算符中有非数值参数”的错误!
解决R语言出现“二进列运算符中有非数值参数”的错误!
2294 0
解决R语言出现“二进列运算符中有非数值参数”的错误!
|
5天前
|
Python
数值运算
数值运算。
16 4
定义求x的n次幂的函数,并返回计算结果
定义求x的n次幂的函数,并返回计算结果
|
6月前
|
存储 算法 Java
数值问题
数值问题
90 1
不用任何比较运算符找出两个整数中的较大的值
不用任何比较运算符找出两个整数中的较大的值
80 0
wustojc1003设计函数求2个整数的最大值
wustojc1003设计函数求2个整数的最大值
49 0
|
C++
C++ 计算斐波那契数列第100万项的精确整数值
C++ 计算斐波那契数列第100万项的精确整数值
111 0
C#中字符串是否可以转换为数值
C#中字符串是否可以转换为数值
|
存储
数值常量
数值常量
78 0
函数是第一类值
函数是第一类值
97 0