首页 > 数据库 >sql语气查询去重的两种方法、sql的模糊查询、sql中的日期函数、mysql字符串截取之substring_index、sql中字符串的切割、截取、删除、替换、计算字符串长度函数、返回某个日期之间的

sql语气查询去重的两种方法、sql的模糊查询、sql中的日期函数、mysql字符串截取之substring_index、sql中字符串的切割、截取、删除、替换、计算字符串长度函数、返回某个日期之间的

时间:2023-02-14 21:24:11浏览次数:62  
标签:截取 mysql substring date sql 字符串 order select

sql语气查询去重的两种方法

以下两种都可以进行去重查询,区别是: 用distinct去重,只能查询到去重的属性那一列,无法查询其他字段 用group by分组查询,可以根据需求查询对应的其他字段,推荐用group by

第一种:使用distinct(关键词distinct用于返回唯一不同的值)
select distinct university from user_profile;

第二种:使用group by按照university进行分组
select university from user_profile group by university;

sql的模糊查询

这道题主要考察的是模糊查询 字段名 like '匹配内容'

_ :下划线 代表匹配任意一个字符;

% :百分号 代表匹配0个或多个字符;

[]: 中括号 代表匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );

[^]: ^尖冒号 代表 非,取反的意思;不匹配[ ]中的任意一个字符。。

tips:面试常问的一个问题:你了解哪些数据库优化技术? SQL语句优化也属于数据库优化一部分,而我们的like模糊查询会引起全表扫描,速度比较慢,应该尽量避免使用like关键字进行模糊查询。

sql中的日期函数

知识
日期函数
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。

1
select DAYOFWEEK('1998-02-03')
-> 3

WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

1
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5

DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。

1
mysql> select DAYOFMONTH('1998-02-03');
-> 3

DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。

1
mysql> select DAYOFYEAR('1998-02-03');
-> 34

MONTH(date)
返回date的月份,范围1到12。

1
mysql> select MONTH('1998-02-03');
-> 2

DAYNAME(date)
返回date的星期名字。

1
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'

MONTHNAME(date)
返回date的月份名字。

1
mysql> select MONTHNAME("1998-02-05");
-> 'February'

QUARTER(date)
返回date一年中的季度,范围1到4。

1
mysql> select QUARTER('98-04-01');
-> 2

WEEK(date)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。

1
mysql> select WEEK('1998-02-20');
-> 7

WEEK(date,first)
2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。
如果第二个参数是0,星期从星期天开始,
如果第二个参数是1,从星期一开始。

1
mysql> select WEEK('1998-02-20',0);
-> 7

1
mysql> select WEEK('1998-02-20',1);
-> 8

YEAR(date)
返回date的年份,范围在1000到9999。

1
mysql> select YEAR('98-02-03');
-> 1998

HOUR(time)
返回time的小时,范围是0到23。

1
mysql> select HOUR('10:05:03');
-> 10

MINUTE(time)
返回time的分钟,范围是0到59。

1
mysql> select MINUTE('98-02-03 10:05:03');
-> 5

SECOND(time)
回来time的秒数,范围是0到59。

1
mysql> select SECOND('10:05:03');
-> 3

PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。

1
mysql> select PERIOD_ADD(9801,2);
-> 199803

PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。

1
mysql> select PERIOD_DIFF(9802,199703);
-> 11

mysql字符串截取之substring_index

substring_index()函数用来截取字符串

    substring_index(str,delim,count)
    str:要处理的字符串
    delim:分隔符
    count:计数

示例:

如 str=www.wiki.com

则 substring_index(str,'.',1) 处理的结果是:www

substring_index(str,'.',2) 得到的结果是:www.wiki

也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容,

相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。

如:

substring_index(str,'.',-2) 得到的结果为:http://wikibt.com

如果要中间的的 wiki 怎么办?

很简单的,需要从两个方向截取:

先截取从右数第二个分隔符的右边的全部内容,再截取从左数的第一个分隔符的左边的全部内容:

  substring_index(substring_index(str,'.',-2),'.',1);

sql中字符串的切割、截取、删除、替换、计算字符串的长度函数

select
-- 替换法 replace(string, '被替换部分','替换后的结果')
-- device_id, replace(blog_url,'http:/url/','') as user_name
 
-- 截取法 substr(string, start_point, length*可选参数*)
-- device_id, substr(blog_url,11,length(blog_url)-10) as user_nam
 
-- 删除法 trim('被删除字段' from 列名)
-- device_id, trim('http:/url/' from blog_url) as user_name
 
-- 字段切割法 substring_index(string, '切割标志', 位置数(负号:从后面开始))
device_id, substring_index(blog_url,'/',-1) as user_name
 
from user_submit;

字符串的截取:substring(字符串,起始位置,截取字符数)
字符串的拼接:concat(字符串1,字符串2,字符串3,...)
字母大写:upper(字符串)

计算字符串长度函数

char_length(字符串列名)

sql的高级语法:窗口函数

见链接:https://zhuanlan.zhihu.com/p/92654574

补充窗口函数:
image

lead的写法:(偏移标的,偏移量,null)

ifnull(A,B):A非空返回A,A是空值返回B

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

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

用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 left(order_date, 7) = '2020-01'
order by order_date

字符串比较

select *
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

时间函数匹配

select order_num, order_date
from Orders
where year(order_date) = '2020' and month(order_date) = '1'
order by order_date

利用date_format函数 (参考其中的匹配规则进行匹配)

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

标签:截取,mysql,substring,date,sql,字符串,order,select
From: https://www.cnblogs.com/suncolor/p/17114194.html

相关文章

  • Python 使用mysql.connector、pymysql和 MYSQLdb(MysqlClient)操作MySQL数据库
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一。本文主要介绍安装mysql.connector,、pymysql......
  • 高效字符串匹配算法——BM 算法详解(C++)
    定义BM算法是由Boyer和Moore两人提出的一种高效的字符串匹配算法,被认为是一种亚线性算法(即平均的时间复杂度低于线性级别),其时间效率在一般情况下甚至比KMP还要快3......
  • MySQL SQL题
    1列转行 selectlcase(`name`)as`name`,sum(CASETYPEwhen'Breakfast'THEN`VALUE`else0end)asBreakfast,sum(CASETYPEwhen'Lunch'THEN`VALUE`e......
  • 干货!!!mysql如何进行优化,mysql优化环节
    MySQL优化环节有很多,我个人经验从硬件优化、软件优化、表结构设计、查询语句四个方面来考虑。硬件优化:MySQL软件本身是运行在硬件服务器之上,数据是存储在磁盘的。如果能......
  • Mybatis12 - 动态SQL
    动态SQLMybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。Oneofthemostpowerfulfeatures......
  • Vue实现字符串换行
    今天在做的时候需要用到字符串换行,在网上找了一下,换行是通过添加white-space:pre-wrap属性,通过\n进行换行在这里记录一下<stylelang="scss"scoped>::v-deep.el-tab......
  • dinky-binlog-kafka-flinksql流程处理
    准确阶段:mysql:开启mysql日志kafka:需检查服务是否正常maxwell:这里采用19版本,过新的版本对java版本要求高,我这里是java8maxwell-1.19.0maxwell操作:cd/root/tar_temp/maxwell-......
  • (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解零:有关说明(1)安装数据库与建表关于数据库如何......
  • 在EF中执行SQL语句
    在EF中执行SQL语句 你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了。话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你......
  • 在EF中执行SQL语句新
    在EF中执行SQL语句 一、为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢。如果要写SQL语句,完全可......