欢迎光临
我们一直在努力

SQL必知必会零基础快速入门_牛客刷题指南:82~85

SQL82 返回 2020 年 1 月的所有订单的订单号和订单日期

方法一:时间函数匹配

select order_num,order_date
from Orders
where month(order_date)= '1'
order by order_date;

日期/时间分量提取

提取年份

YEAR(date)

提取月份

MONTH(date)

提取日

DAY(date) / DAYOFMONTH(date)

提取小时

HOUR(time)

提取分钟

MINUTE(time)

提取秒

SECOND(time)

利用date_format函数

select order_num,order_date
from Orders
where date_format(order_date,'%Y-%m')='2020-01'
order by order_date;

注意是:'2020-01'

DATE_FORMAT(date, format)

参数说明
  • date:必填参数,需格式化的日期 / 时间值(可是日期字段,如 order_date;也可是日期函数结果,如 NOW()、CURDATE())。
  • format:必填参数,格式化字符串,由 格式符 + 普通字符 组成(普通字符如 -、:、空格,直接原样显示;格式符对应日期 / 时间分量,如年份、月份)。
  • 常用格式符(适配表格中示例)

    表格中 DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s') 用到的核心格式符:

    • %Y:4 位完整年份(如 2026)
    • %m:2 位月份(01~12,如 01、12)
    • %d:2 位日期(01~31,如 01、31)
    • %H:24 小时制小时(00~23,如 00、23)
    • %i:2 位分钟(00~59,如 00、59)
    • %s:2 位秒(00~59,如 00、59)

    方法二:字符串匹配(近似查找法)

    用like来查找

    select order_num,order_date
    from Orders
    where order_date like '2020-01%'
    order by order_date;

    字符串比较

    select order_num,order_date
    from Orders
    where order_date>='2020-01-01 00:00:00' and order_date<='2020-01-31 23:59:59'
    order by order_date;

    用正则来查找(效率不如like,能用like就用like)

    select order_num,order_date
    from Orders
    where order_date regexp '2020-01'
    order by order_date;

    常用正则相关函数对比

    函数名称

    核心功能

    MySQL 语法与示例

    REGEXP_LIKE

    判断字符串是否匹配正则表达式(返回布尔值/匹配行)

    REGEXP_LIKE(str, pattern)<br>示例:REGEXP_LIKE('test123', '^test') → 1(匹配成功)

    REGEXP_SUBSTR

    提取字符串中匹配正则的子串

    REGEXP_SUBSTR(str, pattern)<br>示例:REGEXP_SUBSTR('a1b2c3', '[0-9]+') → '1'

    REGEXP_INSTR

    返回正则匹配内容在字符串中的起始位置

    REGEXP_INSTR(str, pattern)<br>示例:REGEXP_INSTR('a1b2c3', '[0-9]') → 2

    REGEXP_REPLACE

    替换字符串中匹配正则的内容

    REGEXP_REPLACE(str, pattern, new_str)<br>示例:REGEXP_REPLACE('a1b2c3', '[0-9]', '') →'abc'

    REGEXP_COUNT

    统计字符串中匹配正则的内容出现次数

    REGEXP_COUNT(str, pattern)<br>示例:REGEXP_COUNT('a1b2c3', '[0-9]') → 3

    切割字符串

    select order_num,order_date
    from Orders
    where left(order_date,7)='2020-01'
    order by order_date;

    常用字符串切割函数对比

    函数名称

    核心功能

    MySQL 语法与示例

    LEFT

    从字符串左侧截取指定长度的子串

    LEFT(str, len)<br>示例:LEFT('2020-01-01', 7) → '2020-01'

    RIGHT

    从字符串右侧截取指定长度的子串

    RIGHT(str, len)<br>示例:RIGHT('2020-01-01', 2) → '01'

    SUBSTRING/SUBSTR

    从字符串指定位置开始截取指定长度的子串

    SUBSTRING(str, pos, len)<br>示例:SUBSTRING('abcdef', 2, 3) → 'bcd'

    SUBSTRING_INDEX

    按分隔符截取第n个分隔符前后的子串(MySQL专属)

    SUBSTRING_INDEX(str, delim, count)<br>示例:SUBSTRING_INDEX('a,b,c', ',', 2) → 'a,b'

    REGEXP_SUBSTR

    正则匹配截取子串(Oracle/MySQL 8.0+)

    REGEXP_SUBSTR(str, pattern, pos, occurrence, mode)<br>示例:REGEXP_SUBSTR('2020-01-01', '^[0-9]{4}-[0-9]{2}') → '2020-01'

    STRING_SPLIT

    按分隔符拆分字符串为多行(SQL Server 2016+)

    无原生函数,可通过自定义函数或SUBSTRING_INDEX循环实现

    STUFF

    删除指定位置字符并替换(SQL Server专属)

    无原生函数,可通过CONCAT+SUBSTRING实现

    SQL83 确定已售出产品的总数

    聚合函数 sum的使用

    select sum(quantity) items_ordered
    from OrderItems;

    SQL84 确定已售出产品项 BR01 的总数

    第一种使用group by没有什么意义,为冗余代码

    select sum(quantity)
    from OrderItems
    group by prod_id
    having prod_id='BR01';

    第二种由于where语法优先级较高,有限执行后,进行求和并查询

    select sum(quantity)
    from OrderItems
    where prod_id='BR01';

    SQL85 确定 Products 表中价格不超过 10 美元的最贵产品的价格

    关键词:max

    select max(prod_price) max_price
    from Products
    where prod_price<=10;

    功能MySQL 函数
    最大值 max()
    最小值 min()
    平均值 avg()
    总值 sum()
    总数 count()

    用order + limit 实现 max

    select prod_price max_price
    from Products
    where prod_price<=10
    order by prod_price desc
    limit 0,1;
    #limit 1 offset 0 = limit 0,1

    赞(0)
    未经允许不得转载:171主机测评 » SQL必知必会零基础快速入门_牛客刷题指南:82~85
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址