mysql积累

日期+时间

# 常用日期+时间关键字
SELECT CURDATE();         # 当前日期,年月日
SELECT CURRENT_DATE;      # 当前日期,年月日
SELECT now();             # 当前时间,包含时分秒
SELECT CURRENT_TIME;      # 当前时间,包含时分秒
SELECT CURRENT_TIMESTAMP; # 当前时间,包含时分秒
SELECT CURRENT_USER;      # 当前用户,没啥时间关系,哈哈

# 日期提取
SELECT DATE('2003-12-31 01:02:03');       # 提取年月日
SELECT YEAR('2018-02-22');                # 年份
SELECT MONTH('2018-02-22');               # 月份
SELECT MONTHNAME('2018-02-22');           # 月份英文名
SELECT QUARTER('2018-05-22');             # 第几季度
SELECT YEARWEEK('2003-01-31 01:02:03');   # 年份和周
SELECT WEEKOFYEAR('2003-01-31 01:02:03'); # 第几周
SELECT WEEK('2003-01-31 01:02:03');       # 和WEEKOFYEAR一样
SELECT DAY('2018-02-22 00:00:00');        # 返回月中第几天
SELECT DAYOFYEAR('2018-02-22 10:30:42');  # 一年中的第几天
SELECT DAYOFMONTH('2018-02-22 00:00:00'); # 对应月里面第几天,和DAY一样

# 时间提取
SELECT TIME('2018-02-22 10:30:42');       # 提取时分秒
SELECT HOUR('2018-02-22 10:30:42');       # 小时
SELECT MINUTE('2018-02-22 10:30:42');     # 分钟
SELECT SECOND('2018-02-22 10:30:42');     # 秒

# 提取公式:EXTRACT(unit FROM date) 从日期中提取特定单位的值
SELECT EXTRACT(YEAR FROM '2022-05-27');   # 年
SELECT EXTRACT(MONTH FROM '2022-05-27');  # 月
SELECT EXTRACT(DAY FROM '2022-05-27');    # 日
SELECT EXTRACT(HOUR FROM '2022-05-27');   # 时
SELECT EXTRACT(HOUR FROM now());          # 时
SELECT EXTRACT(MINUTE FROM now());        # 分
SELECT EXTRACT(SECOND FROM now());        # 秒

# 日期差值
# 公式DATEDIFF(expr1,expr2),TIMEDIFF(expr1,expr2)
# DATEDIFF结果正数是expr1比expr2多几天,负数则反之
# TIMEDIFF只能expr1时间大于expr2,要不报错
SELECT DATEDIFF('2018-02-22','2018-03-22');
SELECT DATEDIFF('2010-11-30 13:59:59','2010-11-30 14:59:59');
SELECT DATEDIFF('2010-11-30 13:59:59','2010-11-30');
SELECT TIMEDIFF('2010-11-30 15:59:59','2010-11-30 14:59:59'); 


# 时间计算
# (1)第一个位置是符号位,默认是+
# (2)时分秒之间是:
# (3)ADDDATE和DATE_ADD一样,SUBDATE和DATE_SUB一样
# (4)DATE_ADD和DATE_SUB反向计算
# (5)公式DATE_ADD(date,INTERVAL expr unit)
# (6)公式ADDTIME(expr1,expr2)
# (7)unit左侧补齐补0,例如:unit=HOUR_SECOND,expr='2:3',补齐为'0:2:3'
SELECT ADDDATE(now(), INTERVAL 1 YEAR);                              # 加1年               
SELECT DATE_ADD(now(), INTERVAL 1 YEAR);                             # 加1年
SELECT DATE_ADD('2023-12-13', INTERVAL 1 MONTH);                     # 加1月
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL 1 DAY);               # 加1天
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1 1' YEAR_MONTH);    # 加1年、1月
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1 10' DAY_HOUR);     # 加1天、10时
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1 1:2' DAY_MINUTE);  # 加1天、1时、2分
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1 1:2:3' DAY_SECOND);# 加1天、1时、2分、3秒
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1:2' HOUR_MINUTE);    # 加1时、2分
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '1:2:3' HOUR_SECOND);  # 加1时、2分、3秒
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '2:3' MINUTE_SECOND);  # 加2分、3秒
SELECT DATE_ADD('2023-12-13 13:19:29',INTERVAL '-1 1:2:3' DAY_SECOND);# 减1天、1时、2分、3秒
SELECT DATE_SUB('2023-12-13 13:19:29',INTERVAL '1 1' DAY_HOUR);       # 减1天、1时
SELECT DATE_SUB('2023-12-13 13:19:29',INTERVAL '-1 +1' DAY_HOUR);     # 加1天、1时
SELECT SUBDATE('2023-12-13 13:19:29',INTERVAL '-1 +1' DAY_HOUR);      # 减1天、1时

SELECT ADDTIME('2023-12-13 13:19:29','1:2:3');                        # 加1时、2分、3秒
SELECT ADDTIME('2023-12-13 13:19:29','-1:2:3');                       # 减1时、2分、3秒
SELECT ADDTIME('2023-12-13 13:19:29','0:0:3');                        # 加3秒
SELECT ADDTIME('2023-12-13 13:19:29','3');                            # 加3秒
SELECT ADDTIME('2023-12-13 13:19:29','2:3');                          # 2分、3秒
SELECT SUBTIME('2023-12-13 13:19:29','1:2:3');                        # 减1时、2分、3秒


# 公式:格式化DATE_FORMAT(date,format)
SELECT DATE_FORMAT('2023-12-13 22:23:00', '%Y/%m/%d');  # 输出格式:2023/12/13
SELECT DATE_FORMAT('2023-12-13 22:23:00', '%H:%i:%s');  # 输出格式:22:23:00
 

截取+拼接

# 公式SUBSTRING(column_name, start_position, length),截取column_name值,从第start_position开始,截取length长度的字符串
# 公式LEFT(string, length),截取string,从左截取length长度的字符串
# 公式CONCAT_WS(separator,string1,string2,…)
# 公式GROUP_CONCAT()
SELECT LEFT('2023-04-08', 7);
SELECT RIGHT('2023-04-08', 7);
SELECT SUBSTRING('2023-04-08', 7);
SELECT SUBSTRING('2023-04-08', 3, 3);
SELECT CONCAT('Hello', ' ', 'World');
SELECT CONCAT_WS( '#','Hello', 'World','!');
SELECT is_valid, GROUP_CONCAT(cust_key SEPARATOR '#')
FROM dt_phone_blacklist
WHERE id >275
GROUP BY is_valid;

distinct

# distinct 多个字段
SELECT DISTINCT task_status,task_status_desc FROM dt_risk_account_apply

case...when

公式:case...when...when...else...

# 字段A不为空,不=2的情况下加和值字段B
SELECT
  SUM(
    CASE
      WHEN 字段A != '2' THEN 字段B
      WHEN 字段A IS NULL THEN 字段B
      ELSE 0
    END
  ) AS 字段C
FROM
  表名

count(1)

工作中发现的bug

修改后:

rand

SELECT RAND();                   # 0-1之间随机数
SELECT FLOOR(RAND());            # 向下取整
SELECT CEIL(rand());             # 向上取整
SELECT CEILING(3.44);            # 向上取整
SELECT ROUND(3.44);              # 精度限制=0           
SELECT ROUND(3.4455667788,3);    # 精度限制=3   
SELECT MD5(RAND() * 10000)       # md5值   

工作遇到的问题:

1、int(1)和int(10)

提工单修改字段语句

ALTER TABLE `bs_org`
    ADD COLUMN `new_col` int(1) DEFAULT 0 NOT NULL COMMENT 'int(1)和int(10)区别';

这里的int(1)是不是不够用呢??????

知识点:mysql中的int(1)和int(10)的区别-CSDN博客

mysql中int占4个字节(32位),最小值:-2147483648(-2的31次方),最大值:2147483647(2的31次方-1),只有和

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值