第十一章 - 模糊匹配(like)、正则匹配(REGEXP)、文本处理函数、时间处理函数

news/2024/4/27 13:04:20/文章来源:https://blog.csdn.net/weixin_44678403/article/details/129151347

第十一章 - 模糊匹配(like)、正则匹配(REGEXP)、文本处理函数、时间处理函数

    • 模糊匹配和正则匹配
      • like
        • `%`通配符
        • `_`通配符
      • REGEXP 正则匹配
    • 文本拼接
      • concat()
      • substring()
      • substring_index()
      • 一些文本处理函数
    • 时间处理函数
        • from_unixtime()
        • adddate(日期,增加天数) 增加日期
        • datediff() 两个日期相差的天数
        • curdate() 获取当前日期
        • dayofweek()
        • year() 获取日期中的年分
        • month() 获取日期中的月份
        • day() 获取日期中的天
        • hour() 获取时间中的小时数
    • 偏移函数 lead() & lag()

模糊匹配和正则匹配

如何通过关键字来搜索出需要的数据来。用简单的比较操作或者用where来筛选是不行的。下面介绍两种匹配方法。

like

可以通过like操作符来使用通配符操作,从而实现模糊匹配的效果。
使用注意:
1.通配符搜索处理的时间要比一般搜索的时间要长。
2.如果其他操作符能达到相同的效果,应该使用其他操作符。
3.在需要使用通配符时,非必须的情况下,不要把他们用在搜索的开始处。
4.要注意通配符的位置,如果位置放错,返回的数据就不一定准确。

%通配符

%表示任何字符出现任意次数
%通配符是最经常使用的。
%在字符的右边如:ka%表示匹配所有以结尾的数据
%在字符的左边如:%ka表示匹配所有以结尾的数据
%在字符的两边如:%ka%表示匹配所有包含ka字符的数据

举个例子:找出以Ka开头的名字

selectPassengerId,Name
fromtest.titanic
whereName like "ka%"

输出结果:
在这里插入图片描述

举个例子:找出所有包含Miss的名字

selectPassengerId,Name
fromtest.titanic
wherename like '%Miss%'

输出结果:
在这里插入图片描述
所有name列中包含Miss的数据

_通配符

_表示任何字符出现任意次数
_通配符是最经常使用的。
_在字符的右边如:ka_表示匹配所有以ka开头的三位字符
_在字符的左边如:_ka表示匹配所有以ka结尾的三位字符
_在字符的两边如:9_1表示匹配所有以9开头以1结尾的三位字符
举个例子: 找出所有以9开始以1结尾的三位数的用户ID

selectPassengerId
fromtest.titanic
wherePassengerId like '9_1'

输出结果:
在这里插入图片描述

REGEXP 正则匹配

正则表达式是用来匹配搜索文本的强大的工具,能够实现比like更复杂的文本匹配。比如需要匹配邮箱格式的数据,需要匹配电话号码,或者是匹配一个网址的链接等,都可以用正则表达式来实现。

下面通过几个案例来介绍MySQL中的正则匹配的用法:
举个例子:找出所有以M开头的人名

select*
fromtest.titanic
whereName regexp '^M'

输出结果:
在这里插入图片描述
举个例子:找出年龄为40岁或者50岁的数据

select*
fromtest.titanic
whereage regexp '40|50'

在这里插入图片描述

举个例子:只匹配age年龄中有小数的数据

selectage
fromtest.titanic
where# '^[0-9]*\\.'表示所有以数字开始的,且包含.的字符。age regexp '^[0-9]*\\.'

输出结果:
在这里插入图片描述
正则匹配中一些常用的匹配字符:

| 表示或的意思,使用效果同 or
^ 文本开始
$ 文本结尾
. 匹配任意一个字符
* 0个或多个匹配
? 0个或1个匹配,等同于{0,1}
+ 1个或多个匹配,等同于{1,}
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围 m不超过255
[0-9] 匹配任意数字
[A-Z] 匹配任意大写字母
[a-z] 匹配任意小写字母
[a-zA-Z] 匹配任意字母
[a-zA-Z0-9] 皮皮任意字母和数字

文本拼接

concat()

在数据查询时,如果想把两个字段内的信息拼接为一个新的字段,这时候可以通过使用concat()来实现文本的拼接功能。
举个例子:把两列的数据合并为一个新的列
使用concat()函数,以逗号为分割符,把sex和age的数据拼接为新的一列数据sex&age

selectselectsex,age,concat(sex,',',age) as 'sex&age'
fromtest.titanic

输出结果:
在这里插入图片描述
concat()中可以用多个逗号,自定义设置不同的拼接样式。如下面所示:

selectsex,age,concat(sex,'-年龄为','(',age,')') as 'sex&age'
fromtest.titanic

输出结果:
在这里插入图片描述

substring()

在SQL中不光能实现数据的拼接,还可以实现数据的截取。
substring()是可以通过设置实现从指定的位置截取指定位数的数据。

substring(字段名称,起始位数,截取位数)

举个例子:有时候会需要把日期和时间区分开如2014/9/18 15:03这种样式,当我们只需要其中的年月日的时候该如何提取?
通过观察2014/9/18 15:03数据可以看出,获取年月日的信息只需要提取前面9位字符就够了
可以通过substring()来截取需要的日期,下面例子表示截取vtime字段中,从第一位开始,截取前9位数字

selectvtime,# 截取vtime字段,从第1个字符开始,截取9位字符。substring(vtime,1,9) as '日期'
fromrectmall.log

输出结果:
在这里插入图片描述

substring_index()

前面截取的是日期格式,字符的位置是一致的,可以通过固定的位数进行截取。但是当我们遇到字符长短不一样的时候该怎么提取呢,如下面这样字段中包含多个信息,但是只需要提取前面的名字:
在这里插入图片描述

这个时候就不能用固定位数的方式来提取了,可以通过关键字来提取。

substring_index(字段名称,关键字,出现次数)

举个例子:

selectname,# 当关键字 , 出现第一次的时候,截取前面的数据。如果写位-1就是截取关键字后面的数据substring_index(name,',',1)
fromtest.titanic

输出结果:
在这里插入图片描述

一些文本处理函数

upper() 将字符转换位大写
left() 截取左边的字符
lenght() 返回字符的长度
lower()将字符转换为小写
ltrim() 去除左边的空格
right()截取右边的字符
rtrim()去除右边的空格

时间处理函数

from_unixtime()

把 UNIX 时间戳转换为普通格式的日期时间值。在查询数据时,会遇到时间戳格式的时间,这时候就需要把时间戳转换为需要的日期。
举个例子:

selecttime_stamp,# '%Y-%m-%d %r'可以根据需要自己选择需要获取的时间,下面有不同的表示代码from_unixtime(time_stamp, '%Y-%m-%d %r' ) as "日期时间"
from behavior_log

在这里插入图片描述
转换的日期格式代码

%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%Y 年, 数字, 4 位 %y 年, 数字, 2 位
%d 月份中的天数, 数字(00……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%r 时间,12 小时(hh:mm:ss [AP]M)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%U 星期(0……52), 这里星期天是星期的第一天

adddate(日期,增加天数) 增加日期

selectadddate('2022-01-01',3)

输出结果:
在这里插入图片描述

datediff() 两个日期相差的天数

datediff(日期1,日期2) #结果为 日期1 - 日期2 的天数

selectdatediff('2022-01-01','2022-01-05')

输出结果:
在这里插入图片描述

curdate() 获取当前日期

直接获取当天的日期。

selectcurdate()

输出结果:
在这里插入图片描述

dayofweek()

输入日期,返回日期是周几。默认1为周日,2为周一

selectcurdate() as '当前日期',dayofweek(curdate()) as '周几'

输出结果:
在这里插入图片描述

year() 获取日期中的年分

selectvtime,year(vtime)
fromrectmall.log

输出结果:
在这里插入图片描述

month() 获取日期中的月份

selectvtime,month(vtime)
fromrectmall.log

输出结果:
在这里插入图片描述

day() 获取日期中的天

selectvtime,day(vtime)
fromrectmall.log

输出结果:
在这里插入图片描述

hour() 获取时间中的小时数

selectvtime,hour(vtime)
fromrectmall.log

输出结果:
在这里插入图片描述

偏移函数 lead() & lag()

lead()是 把指定列的数据向上移动指定行数,空出来的行用null填充。
lag()是 把指定列的数据向下移动指定行数,空出来的行用null填充。
lead()lag()的参数设置是一样的,只是移动的方向不一样。

举个例子:把action列的数据向上移动两行。
over()中不设置参数,可实现使整列数据偏移指定的行数。

selectaction,lead(action,2) over()
fromrectmall.log

输出结果:
在这里插入图片描述
举个例子:计算商品id为i161 的商品,两次点击之间的间隔时间。
步骤:

  1. 新建一列时间数据,把vitme的时间全部向上移动一行,实现,实现前后点击时间在同一行中,方便后续计算
  2. 在前面建立的查询结果上,在通过datediff()进行日期的计算,或者timediff()时间的计算
  3. 得出相差的天数(相差天数),或者相差的小时数(相差时间)
    当在over()中指定参数是,可以实现窗口函数的控制效果。
select*,datediff(vtime2,vtime) as '相差天数',timediff(vtime2,vtime) as '相差时间'
from(selectitem_id,vtime,lead(vtime,1) over(partition by item_id order by vtime) as vtime2fromrectmall.logwhereitem_id = 'i161') as temp

输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72792.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机组成原理】求寻址范围(按字/按字节)

今天一道计算机组成原理的复习题一直没搞懂怎么做的,网上讲解求寻址范围题型的资料和视频也很少,花了半个晚上才搞懂。 首先,理解存储体,存储单元,存储字,存储元。(文章末尾详细解释了) 以下是…

2022年休闲游戏市场总结

在预测 2023 年之前,我们先回顾一下 2022 年。从上一年发生的事件中往往能看到未来趋势的影子,所以 2022 年的总结至关重要。一、2022年总结回顾1、流行游戏类型回顾 2022 年,三种超休闲游戏表现最为突出:跑酷游戏:跑酷…

你知道IT运维的本质是什么吗?

大家好,我是技福的小咖老师。 之前看到个文章,说运维的本质是“可视化”,甚至还有人说是DevOps。不可否认,“可视化”是运维过程中非常重要的一个环节;DevOps则是开发运维一体化非常重要的工具。 究其根本&#xff0…

leetcode重点题目分类别记录(一)数据结构类

算法题分类别记录数组排序归并排序合并两有序数组归并排序快速排序荷兰旗问题快速排序堆排序基数排序滑动窗口/双指针N数之和四数相加链表环形链表重排链表LRU缓存栈与队列栈实现队列/队列实现栈最小栈/最小队列单调队列单调栈哈希表字符串字符串处理字符串匹配KMP子串二叉树二…

Dart的安装及环境变量配置

本文介绍dart的安装步骤及环境变量配置,以及如何在vscode中进行开发环境配置。一、dart的安装访问dart官网https://dart.cn/,点击网站右上角的获取DART SDK进行下载页面。如下图,选择下载SDK的zip压缩文件。根据自己的操作系统情况选择合适版…

吉卜力风格水彩画怎么画?

著名的水彩艺术家陈坚曾说:“水彩是用水润调和形成的饱和度极高的艺术画面,在纸上晕染的画面面积、强度等具有许多随意性,天空的颜色乌云密布,都是很随意的,难以模仿。” 是的,水彩画的妙处就在于不确定的…

apk中代码执行adb指令实现

背景:想要在android apk中直接使用adb指令,从而不需要把手机通过数据线方式连接到电脑,在电脑端执行adb指令。 一、权限相关 想要在apk代码中执行adb命令,涉及到执行权限。 首先手机需要有root权限。其次就算手机已经root了&…

(18)目标检测算法之数据集标签格式转换:json2txt、xml2txt

目标检测算法之数据集标签格式转换:json2txt、xml2txt 目标检测最常见的模型:YOLO,常见的几种标注方式:矩形框、旋转矩形框、实例分割中的多边形标注等类型,根据其标注标签,目标检测主要有以下两种转换方式…

Word中批量调整图片大小

当一个文档中图片较多,又需要调整图片大小时,这时可以通过“宏”执行代码来批量调整。打开一个Word文档。“AltF8"键打开宏。设置“宏名”,并单击“创建”。创建完宏后,将进入Visual Basic 编辑器界面。在代码编辑区全选&…

【面试题】TCP如何保证传输可靠性?TCP流量控制实现、拥塞控制、ARQ协议、停止等待ARQ、连续ARQ

文章目录1. TCP 如何保证传输的可靠性?2.TCP 如何实现流量控制?3.TCP 的拥塞控制是怎么实现的?3.ARQ 协议了解吗?4.停止等待 ARQ 协议5.连续 ARQ 协议1. TCP 如何保证传输的可靠性? 基于数据块传输 :应用数据被分割成…

前端编译、JIT编译、AOT编译

一、前端编译:java设计之初就是强调跨平台,通过javac将源文件编译成于平台无关的class文件, 它定义了执行 Java 程序所需的所有信息(许多Java"语法糖",是在这个阶段完成的,不依赖虚拟机&#xff…

01-MySQL基础-简介安装navicat使用SQL(DDL、DML、(DCL)、DML)

文章目录MySQL基础1,数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL2,MySQL2.1~2.4 mysql安装2.5 MySQL数据模型3,SQL概述3.1 SQL简介3.2 通用语法3.3 SQL分类4,DDL:操作数据库4.1 查询4.2 创建数据…

Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList

集合集合的理解和好处保存多个数据使用的是数组,分析数组的弊端数组1、长度开始必须指定,而且一旦指定,不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…

手把手搭建springboot项目05-springboot整合Redis及其业务场景

目录前言一、食用步骤1.1 安装步骤1.1.1 客户端安装1.2 添加依赖1.3 修改配置1.4 项目使用1.5 序列化二、应用场景2.1 缓存2.2.分布式锁2.2.1 redis实现2.2.2 使用Redisson 作为分布式锁2.3 全局ID、计数器、限流2.4 购物车2.5 消息队列 (List)2.6 点赞、签到、打卡 (Set)2.7 筛…

Liunx服务器安装SVN

一、下载svn安装包链接:https://pan.baidu.com/s/1gkS0tef2kQP6nvXOS64hUw 提取码:cyuw二、SVN安装部署通过sftp将文件拉取到目的主机路径:/usr/package 跳转文件路径: cd /usr/package 执行解压命令:tar -zxvf subversion-1.14.2.tar.gz 执行…

idea启动报错If you already have a 64-bit JDK installed, define a JAVA HOME variable

IDEA启动报错,如下图所示: 解决方法: 1.根据以下路径找到文件idea64.exe.vmoptions ,路径如下图所示: C:\Users\Thinkpad\AppData\Roaming\JetBrains\IntelliJIdea2020.3\idea64.exe.vmoptions 其中Thinkpad是电脑的…

j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题

Jeeg-boot j-vxe-table 下拉搜索选择框数据加载过多导致前端崩溃问题 最近用到了Jeeg-boot j-vxe-table的组件,这组件时真J8难用,还好多BUG,想用个slot插槽也用不了,好像官方写了个基础就没怎么管了。😑 问题&#xf…

JavaEE-初识Servlet

目录Servlet 是什么?完成一个servlet程序1.创建一个maven项目2.引入依赖3.创建目录4.编写Servlet代码5.打包6.部署7.验证程序第三方工具简化Servlet 是什么? Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app. …

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法,如SSD和YOLO等虽然实现了实时的速度,但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢?何凯明等人将其归咎于正、负样本的不平衡,并基于此提出了新的损失函数Focal L…

支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的股票价格预测 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型&a…