gpt4 book ai didi

sql - 按数字将 SQL 查询排序为字符串

转载 作者:行者123 更新时间:2023-12-04 21:37:35 24 4
gpt4 key购买 nike

我正在根据其他人为其创建数据库的数据创建一些报告,但无法正确排序。

该报告应该显示最近的 20 个条目,但数据不包含时间戳,而是使用两个单独的 varchar 字段创建的,一个用于格式为 MM/dd/yyyy 和一个格式为 HH:mm:ss AM/PM 的时间。当我尝试选择最新数据时,这会导致出现问题。

当我使用时:

SELECT top 20 * FROM SignIn order by Checkin desc, Intime desc

我得到了正确的日期,但时间是从上午 9:59 开始的值,从那里开始按字母顺序下降到晚上 7 点之后的上午 6 点。

在做了很多研究之后,我尝试了以下方法:

SELECT * FROM SignIn order by Checkout desc, CONVERT(varchar(30), outtime,  101) desc  

结果是一样的。

我在 MS SQL 方面做的不多,我对 MySql 更流利,并且以前从未见过任何理由将日期存储为直接字符串。我不知道如何正确排序。

我尝试使用 html、php 和 javascript 处理排序和显示来创建报告,而不是让 SQL 只访问第一条记录,但是加载时间很荒谬,因为它加载了全部 5000 条数据然后进行排序他们和除前 20 个以外的所有剪辑。

尽我所能,我现在无法更改数据库存储,所以我需要一些可以与 varchars 一起使用并尽可能处理 am\pm 区别的东西。

如有任何帮助,我们将不胜感激。

最佳答案

您可以连接两列并将结果转换datetime并将其用于排序。

SELECT top 20 * 
FROM SignIn
ORDER BY cast(Checkout+' '+outtime as datetime) desc

请注意,这假定所有日期和时间均有效。如果您的值不正确,请使用 try_cast (适用于 SQL Server 2012 及更高版本)

SELECT top 20 * 
FROM SignIn
WHERE try_cast(Checkout+' '+outtime as datetime) is not null --invalid values get filtered out
ORDER BY cast(Checkout+' '+outtime as datetime) desc

关于sql - 按数字将 SQL 查询排序为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41231968/

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