Mysql--重复数据、函数

目录

重复数据:

字符串函数:


重复数据:


select 列名1,count(1) as count
from 表名
group by  列名1
having count>1  and 其他条件

select 列名1,列名2,count(1) as count
from 表名
group by  列名1,列名2
having count>1  and 其他条件

查询出重复数据的列,进行分组查询。

delete from 表名
where
(列名1,列名2) in (
    select a.列名1,a.列名2 from (
        select 列名1,列名2
        from 表名
        group by 列名1,列名2 having count(1) > 1 
        ) a
    )
and 
id not in (
    select b.id from (
        select max(id) id
        from 表名
        group by 列名1,列名2 having count(1) > 1
        ) b 
    )

删除重复数据并保留id最大的数据

字符串函数:

CONCAT(s1,s2...sn)字符串 s1,s2 等多个字符串合并为一个字符串
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedStrin;
>>>SQL Runoob Gooogle Facebook
CONCAT_WS(x, s1,s2...sn)同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
>>>SQL-Tutorial-is-fun!
FIELD(s,s1,s2...)返回第一个字符串 s 在字符串列表(s1,s2...)中的位置
SELECT FIELD("c", "a", "b", "c", "d", "e");
>>>3
FIND_IN_SET(s1,s2)返回在字符串s2中与s1匹配的字符串的位置
SELECT FIND_IN_SET("c", "a,b,c,d,e");
>>>3
LOCATE(s1,s)从字符串 s 中获取 s1 的开始位置
POSITION(s1 IN s)从字符串 s 中获取 s1 的开始位置
FORMAT(x,n)

函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。

SELECT FORMAT(250500.5634, 2);
>>>250,500.56
INSERT(s1,x,len,s2)字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
SELECT INSERT("google.com", 1, 6, "runoob");
>>>runoob.com
LCASE(s)/LOWER(s)将字符串 s 的所有字母变成小写字母
UCASE(s)/UPPER(s)将字符串转换为大写
LPAD(s1,len,s2)在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len
SELECT LPAD('abc',5,'xx');
>>>xxabc
RPAD(s1,len,s2)在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
LTRIM(s)去掉字符串 s 开始处的空格
RTRIM(s)去掉字符串 s 结尾处的空格
TRIM(s)去掉字符串 s 开始和结尾处的空格
MID(s,n,len)从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)
REPEAT(s,n)将字符串 s 重复 n 次
REPLACE(s,s1,s2)将字符串 s2 替代字符串 s 中的字符串 s1
STRCMP(s1,s2)比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1  
SUBSTR(s, start, length)/SUBSTRING(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串
SUBSTRING_INDEX(s, delimiter, number)返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1);
>>>c

数字函数:

ABS(x)返回 x 的绝对值 
ACOS(x)/ASIN(x)/ATAN(x)求 x 的反余弦值(单位为弧度),x 为一个数值
CEIL(x)/CEILING(x)返回大于或等于 x 的最小整数 
FLOOR(x)返回小于或等于 x 的最大整数  
DEGREES(x)将弧度转换为角度  degrees
RADIANS(x)将角度转换为弧度     radians
n DIV m整除,n 为被除数,m 为除数
EXP(x)返回 e 的 x 次方
GREATEST(expr1, expr2, expr3, ...)返回列表中的最大值     greatest
LEAST(expr1, expr2, expr3, ...)返回列表中的最小值    least
SQRT(x)返回x的平方根   sqrt
TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)truncate

日期函数:

ADDDATE(d,n)计算起始日期 d 加上 n 天的日期
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
>>>2017-06-25
ADDTIME(t,n)n 是一个时间表达式,时间 t 加上时间表达式 n
SELECT ADDTIME("2020-06-15 09:34:21", "2:10:5"); 
>>> 2020-06-15 11:44:26
DATE_ADD(d,INTERVAL expr type)计算起始日期 d 加上一个时间段后的日期,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
DATE_SUB(date,INTERVAL expr type)函数从日期减去指定的时间间隔。
CURDATE()/CURRENT_DATE()返回当前日期
CURTIME()/CURRENT_TIME()返回当前时间
CURRENT_TIMESTAMP()/SYSDATE()返回当前日期和时间
LOCALTIME()/LOCALTIMESTAMP()返回当前日期和时间
DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数
DATE_FORMAT(d,f)按表达式 f的要求显示日期 d
SELECT DATE_FORMAT('2011-11-11 11-11-11','%Y-%m-%d %r');
>>>2011-11-11 11:11:11 AM
DAYNAME(d)返回日期 d 是星期几,如 Monday,Tuesday
SELECT DAYNAME('select dayname('2022/10/15');')
>>>Saturday
DAYOFMONTH(d)计算日期 d 是本月的第几天
DAYOFWEEK(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推
EXTRACT(type FROM d)从日期 d 中获取指定的值,type 指定返回的值。
FROM_DAYS(n)计算从 0000 年 1 月 1 日开始 n 天后的日期
select from_days(7894);
>>>0021-08-12
LAST_DAY(d)返回给给定日期的那一月份的最后一天
MAKEDATE(year, day-of-year)基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
select makedate(2023,55);
>>>2023-02-24
MAKETIME(hour, minute, second)组合时间,参数分别为小时、分钟、秒
MICROSECOND(date)返回日期参数所对应的微秒数   microsecond
PERIOD_ADD(period, number)为 年-月 组合日期添加一个时段
PERIOD_DIFF(period1, period2)返回两个时段之间的月份差值
SEC_TO_TIME(s)将以秒为单位的时间 s 转换为时分秒的格式
STR_TO_DATE(string, format_mask)将字符串转变为日期
	
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
>>>2017-08-10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值