mysql遇到的一些常用的查询小问题, 时间戳FROM_UNIXTIME date_format

本文介绍了几种实用的SQL查询技巧,包括属性过滤、组合字符串、查找最近记录等,并提供了具体的SQL语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. count中的属性过滤 xxx or null

SELECT 
    DATE_FORMAT(create_time,'%Y-%m-%d') as r_create_time,
    COUNT((process_state=1 and unknow=1) or null) unknown,
    COUNT((process_state=1 and unknow=0 and ignore_state=0) or null) process_state,
    COUNT((process_state=1 and ignore_state=1) or null) ignore_state
FROM
    rs_plate_sure
GROUP BY r_create_time

2. GROUP_CONCAT组合字符串(遇到有分页的时候有用,比如查询某人所有车的车牌,但是作为一个属性显示在一行)

t_score
这里写图片描述
t_r
这里写图片描述

select GROUP_CONCAT(distinct(t_s.score)), t_s.no from t_score t_s left join t_r on t_s.id=t_r.id group by t_s.no

这里写图片描述

SELECT 
   GROUP_CONCAT( DISTINCT (if(t_r.id='2','特殊处理',t_r.data)  )), t_s.id
FROM
    t_score t_s
        LEFT JOIN
    t_r ON t_s.id = t_r.id
GROUP BY t_s.id

3. 找到最近流水的那一行

select b.* from  (SELECT id,max(score) score,no FROM t_score group by no) a
left join t_score b
on a.no = b.no and a.score= b.score;

这里写图片描述

4. 有left join order by 遇到分页的时候混乱

解决办法 order by 一个id 保证left join有序 如果oder by后的顺序依然有等值的就再加个属性来排序

5. update select 将其他表的内容 更新到目标表

UPDATE t_target t_tar
        LEFT JOIN
    (SELECT 
        ifnull(sum(ifnull(park_state,0)),0)sm, park_id
    FROM
        t_park_state
    GROUP BY park_id) r_st ON r_st.park_id = e_s.park_id
        LEFT JOIN
    t_park t_p ON t_p.park_id = e_s.park_id 
SET 
    t_tar.empty_num = (ifnull(t_p.total_space,0) - ifnull(r_st.sm,0))

存储过程添加字段

<update id="initBerthCordinatesTable">
	DELIMITER $$
	drop procedure if exists add_col_homework;
	create procedure add_col_homework()
	BEGIN
	IF NOT EXISTS ( SELECT
	COLUMN_NAME
	FROM
	information_schema.COLUMNS
	WHERE
	1 = 1
	AND TABLE_NAME ='t_detail_berth_ordinates'
	AND COLUMN_NAME ='min_berth_number')
	THEN
	ALTER TABLE `t_detail_berth_ordinates` ADD COLUMN `min_berth_number`
	varchar(36);
	end if;
	end;
	CALL add_col_homework;
	$$
</update>

存储IP4 地址

select INET_ATON('192.168.0.0')

自动更新的时间戳

CREATE TABLE `t_user5` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
   `updatetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间随时更新',
   `createtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '时间是创建的时间,不随时更新',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

insert into test.t_user (id, name) values("1","Tom");
insert into test.t_user (id, name) values("2","Jack");
update test.t_user set name ='June' where id =2;
SELECT * FROM test.t_user;

时间处理

对于long
select FROM_UNIXTIME(ctime/1000,'%Y-%m-%d') dt 

对于datetime
date_format(create_at,'%Y%-%c%-%e')dt
date_formatfrom_unixtime都是MySQL中用来处理日期和时间的函数。 date_format函数用于将或时间按照指定的格式进行格式。它接受两个参数,第一个参数是要进行格式化的日期或时间,第二个参数是指定的格式。例如,使用date_format函数可以将一个日期格式化为"YYYY-MM-DD"的形式。 from_unixtime函数则是将UNIX时间戳转换为日期或时间。UNIX时间戳是从1970年1月1日00:00:00以来经过的秒数。from_unixtime函数接受一个参数,即要转换的UNIX时间戳。例如,使用from_unixtime函数可以将一个UNIX时间戳转换为对应的日期和时间。 这两个函数在日期和时间的处理中非常有用,可以方便地将日期和时间表示为指定的格式,或者将UNIX时间戳转换为可读的日期和时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数](https://download.youkuaiyun.com/download/weixin_38544978/13069972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL常用的三个日期函数DATE_FORMAT()、FROM_UNIXTIME()、UNIX_TIMESTAMP()](https://blog.youkuaiyun.com/b___w/article/details/122057418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值