Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按日期订购,如果未找到名称按时间订购_Sql_Date - Fatal编程技术网

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是个好主意?);