MySQL常用操作及语句

MySQL

MySQL常用操作

字符串

LENGTH(FName)      计算字符串长度 LENGTH(FName)
LOWER(FName)       字符串转换成小写
UPPER(FName)       字符串转换成大写
LTRIM(' abc ')     截去字符串左侧空格
RTRIM(' abc ')     截去字符串右侧空格
TRIM(' abc ')      截去字符串两侧空格 
SUBSTRING(string,start_position,length)   截取子串 SUBSTRING(string,开始位置,截取长度)
INSTR(FName,'m')   计算'm'在字段中的位置   都是从1开始
LEFT(FName,3)       从左开始截取子串  LEFT(FName,截取的位数)
RIGHT(FName,3)     从右侧开始截取子串 RIGHT(FName,截取的长度)
REPLACE(FName,'i','e')  字符串替换 将指定字符替换成新的字符 若要删除子串将之替换成空字符串即可REPLACE(FName,'m','')
REPLACE(' abc 123 wpf',' ','') 删除字符串中间的空格(trim的三个函数无法实现) 
ASCII('abc')        得到字符串的ASCII码,若为多个字符则返回第一个的ASCII码
CHAR(56)            得到一个ASCII码对应的字符
-- 实际案例
FIND_IN_SET( 'a','a,b,c' ) 判断一个字符串是否在另一个字符串中,存在返回索引1开始,不存在返回0  是完全匹配,用,分割
select FIND_IN_SET( 'ab','ab,c' ),FIND_IN_SET( 'a','ab,c' ),FIND_IN_SET( 'a','a,c' ),FIND_IN_SET( 'a,b','a,b,c' ),FIND_IN_SET( '1','2,1,3' )
        --		1  			0				1			  0                         2
用于一个告警字段解决所有告警,如   告警规则:1(14:30告警),2(20:00)  如有多个时间告警,使用,分隔写入,如  1,2,3 使用FIND_IN_SET()匹配规则   
字符串截取实现split的功能

日期

日期:年月日
时间:时分秒
日期时间:年月日 时分秒
时间戳:毫秒数

1.获取日期时间
得到当前日期时间  NOW(),别名:SYSDATE(),CURRENT_TIMESTAMP  2008-01-12 01:13:19
得到当前的日期    CURDATE(),CURRENT_DATE   2008-01-12
得到当前时间      CURTIME(),CURRENT_TIME   01:17:09
一天的开始时间   date_format(curdate(),'%Y-%m-%d %H:%i:%s') 
2.日期增减
DATE_ADD (date,INTERVAL expr type) 别名:ADDDATE()  expr type:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER(季度),YEAR
DATE_ADD(FBirthDay,INTERVAL 2 MONTH) 也可为负数表示之前
若想增加3天2小时分钟 DATE_ADD(date,INTERVAL '3 2:10' DAY_MINUTE)
计算指定日期前的特定时间段的日期  DATE_SUB() ,与DATE_ADD()中参数为负数时效果一样,用法也几乎相同
DATE_SUB(FBirthDay, INTERVAL '3 2:10' DAY_MINUTE)  3天2小时分钟前的时间

3.计算日期差额
DATEDIFF((date1,date2) 只能计算两个日期见的天数差额
DATEDIFF(FRegDay, FBirthDay)/7  周数差额
计算时间差值   TIMESTAMPDIFF(interval,datetime_start,datetime_end)   根据不同的interval返回不同的时间间隔单位(前小返回正,前大返回负)
interval:
SECOND 秒 SECONDS 
MINUTE 分钟 MINUTES 
HOUR 时间 HOURS 
DAY 天 DAYS 
MONTH 月 MONTHS 
YEAR 年 YEARS

4.计算一个日期是星期几
DAYNAME(FBirthDay) 返回英文的日期表示法

5.指定日期格式化
DATE_FORMAT(date,format)  
format:
%S 秒数(00..59)
%H 24小时制的小时 (00..23)
%d 当月的第几天,两位数字,不足补零
%m 两位数字表示的月份(00..12)
%Y 年份数,四位数字
%h 12小时制的小时(01..12)
%i 数字形式的分钟(00..59)
%j 日期在当年中的天数(001..366)
%M 月份名(January..December)
%p 上午还是下午(AM.. PM)
%r 12小时制时间,比如08:09:29 AM
%s 秒数(00..59)
%T 时间,24小时制,格式为hh:mm:ss
%U 所属周是当年的第几周,周日当作第一天(00..53)
%u 所属周是当年的第几周,周一当作第一天(00..53)
%V 所属周是当年的第几周,周日当作第一天(01..53)
%v 所属周是当年的第几周,周一当作第一天(01..53)
%W 星期几(Sunday..Saturday)
%w 星期几,数字形式(0=Sunday..6=Saturday)
%X 本周所属年,周日当作第一天
%x 本周所属年,周一当作第一天
%y 年份数,两位数字

转换函数

MYSQL中提供了CAST()函数和CONVERT()函数用于进行类型转换
CAST(expression AS type)        CONVERT(expression,type)
type: CHAR 字符串,DATE日期,DATETIME时间日期,TIME时间,SIGNED INTEGER有符号整数(缩写SIGNED),UNSIGNED INTEGER无符号整数(缩写UNSIGNED)
CAST('123.456' as decimal) 将会得到 123(小数点后面的将会被省略掉)
CAST('123.456' as decimal(38, 2)) ===>123.46

string转时间
其中第1要在一个“宽松”的语法是被允许的:以任何标点符号作为日期部分和时间部分中的定界符,如:
一个 YYYYMMDD 或 YYMMDD 格式的数字,只要数字看起来像是一个日期。
例如,19830905 和 830905 被解释成为 '1983-09-05 '。
String转date
DATE(Str)
string转timestamp
TIMESTAMP(Str)
TIMESTAMP(CONCAT(date_id,hour_id,minute_id,'00'))

插入或更新 replace

  • replace into
  • replace into set
  • replace select
    举一个实际工作中的例子:定时扫描hive元数据库中的表分区及大小,汇总成表的总大小后写入到MySQL中。粒度为每天一条记录,但为了尽可能的体现表的最新大小,且不至于占用太多的资源,方案定为每天扫描6次,每4小时扫描写入一次。
    其插入更新的操作可以交由数据库来完成,也可以交由程序代码来完成。下面记录的是交由数据库来完成的实现方案:
原文地址:https://www.cnblogs.com/missedyou/p/13254803.html