Sql 按日期订购,如果未找到名称按时间订购
是否可以按日期订购,如果未将日期指定为按时间订购,并且如果时间大于日期,则它将是列表中的第一个。 例如我们有一张桌子-Sql 按日期订购,如果未找到名称按时间订购,sql,date,Sql,Date,是否可以按日期订购,如果未将日期指定为按时间订购,并且如果时间大于日期,则它将是列表中的第一个。 例如我们有一张桌子- id date time name 1 18.10.2011 18.10.2011 number 2 --------- 19.10.2011 number2 3 --------- 18.10.2011 number3 它应该点这样的东西- 1 numb
id date time name
1 18.10.2011 18.10.2011 number
2 --------- 19.10.2011 number2
3 --------- 18.10.2011 number3
它应该点这样的东西-
1 number2
2 number
3 number3
所有数据都以
time()
格式保存在数据库中,因此如果时间和日期相等,它将查看时钟。希望您能理解我的意思。您可以尝试使用按案例排序
。这是未经测试的,但应使您走上正确的道路:
ORDER BY CASE
WHEN date IS NOT NULL AND time < date THEN date
WHEN time > date OR date IS NULL THEN time
ELSE time
END
按案例排序
当日期不为空且时间<日期,则为日期
当时间>日期或日期为空时,则为时间
其他时间
结束
实际上,
ELSE时间在这里可能是不必要的。前两个案例应该涵盖它。您可以尝试使用按案例排序。这是未经测试的,但应使您走上正确的道路:
ORDER BY CASE
WHEN date IS NOT NULL AND time < date THEN date
WHEN time > date OR date IS NULL THEN time
ELSE time
END
按案例排序
当日期不为空且时间<日期,则为日期
当时间>日期或日期为空时,则为时间
其他时间
结束
实际上,ELSE时间在这里可能是不必要的。前两种情况应该包括在内。试试:
select id, date, time, name
from MyTable
order by greatest(time,coalesce(date,time))
(其中一些列名可能是保留字-我希望这是一个简化的示例!)尝试:
select id, date, time, name
from MyTable
order by greatest(time,coalesce(date,time))
(其中一些列名可能是保留字-我希望这是一个简化的示例!)Hmm是否可以这样做-我得到了这种格式的时间-时间()+(90*24*60*60)插入到数据库中,因此我需要将其显示为时间()-(90*24*60*60)以获取插入日期(因为时间显示行将被删除的日期)。Y2ok您的列是什么数据类型?它们是实际的DATETIME
和time
类型,还是表示UNIX时间戳的整数?您好,这些表只是varchar。@Y2ok:如果它们存储为varchar,时间是如何表示的?(谁认为将日期和时间字段存储为varchar是个好主意?)嗯,它们表示为date();嗯,可以这样做吗?我得到了这种格式的时间-时间()+(90*24*60*60)插入到数据库中,所以我需要将其显示为time()-(90*24*60*60)以获得插入日期(因为时间显示行将被删除的日期)。Y2ok您的列是什么数据类型?它们是实际的DATETIME
和time
类型,还是表示UNIX时间戳的整数?您好,这些表只是varchar。@Y2ok:如果它们存储为varchar,时间是如何表示的?(谁认为将日期和时间字段存储为varchar是个好主意?);