gpt4 book ai didi

Mysql 按多列选择顺序

转载 作者:行者123 更新时间:2023-11-29 09:30:36 28 4
gpt4 key购买 nike

下面的脚本创建一个简单的数据库和表。在windows环境下,您可以与wamp服务器(https://sourceforge.net/projects/wampserver/)的phpmyadmin sql控制台一起使用:

delimiter $$

create database testtimes $$
use testtimes $$

create table mytime (
hour bigint not null,
min varchar(3) not null,
sec bigint not null,
unique key mytime_lst (hour,min,sec)
) $$

insert into mytime (hour,min,sec) values (0,"3",10) $$
insert into mytime (hour,min,sec) values (0,"3",11) $$
insert into mytime (hour,min,sec) values (0,"4",8) $$
insert into mytime (hour,min,sec) values (0,"5",3) $$
insert into mytime (hour,min,sec) values (1,"0",7) $$
insert into mytime (hour,min,sec) values (1,"3",10) $$

delimiter ;

在简化的示例中,有 3 列和一些行。列作为一个逻辑单元连接在一起,我在它们上创建了索引。我想精确定位表中的 1 个逻辑单元,并使用索引在该点旁边给出 2 个结果。我不确定我是否有这种支持。如果问题与特定的 SQL 服务器有关,请给我提示。

(为了防止出现不相关的问题:故意将“min”列转换为varchar。上面的示例是一个简化的示例。在真实环境中,我没有能力只依赖bigint。)

示例查询:

select *
from mytime
where (hour >= 0 and min >= "4" and sec >= 7)
order by hour, min, sec asc
limit 2

当我运行上面的查询(phpmyadmin 帮助)时,它仅返回插入的行:

insert into mytime (hour,min,sec) values (0,"4",8) $$

我也想拿回这一行:

insert into mytime (hour,min,sec) values (0,"5",3) $$

是否可以修复该示例查询来完成这项工作?

最佳答案

您应该将字段小时、分钟和秒转换为日期格式,如下所示:

SELECT * FROM mytime 
WHERE STR_TO_DATE(CONCAT(hour,'-',min,'-',sec),'%H-%i-%s') > '00:04:07'
ORDER BY hour,min,sec asc limit 2

如果您愿意,您甚至可以使用>“0:4:7”

或者

SELECT * FROM mytime 
WHERE CONVERT(CONCAT(hour,':',min,':',sec), TIME) > '0:4:7'
ORDER BY hour,min,sec ASC LIMIT 2

如果您不想使用 str_to_date 和 concat 转换为日期,您可以使用带有 OR 的多个 where 子句,如下所示:

SELECT *
FROM mytime
WHERE (HOUR > 0)
OR (HOUR = 0 AND min > 4)
OR (HOUR = 0 AND min = 4 AND SEC >= 7)
ORDER BY hour, min, sec asc
LIMIT 2

关于Mysql 按多列选择顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58814741/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com