在sql中使用两个日期之间的数据获取订单

在sql中使用两个日期之间的数据获取订单,sql,sql-order-by,Sql,Sql Order By,我有如下表格 id名称类别id状态为删除开始日期结束日期显示顺序 SELECT * FROM product WHERE isdelete = 0 AND status = 1 AND name LIKE '%%' AND categoryid = 4 ORDER BY showorder ASC 现在我想像这样绑定数据 1) 开始日期和结束日期介于今天日期之间的数据应位于顶部 2) 其余数据将使用showorder按字段排序 因此,我如何使用一

我有如下表格

id名称类别id状态为删除开始日期结束日期显示顺序

SELECT * 
  FROM product 
 WHERE isdelete = 0 
   AND status = 1 
   AND name LIKE '%%' 
   AND categoryid = 4 
 ORDER 
    BY showorder ASC
现在我想像这样绑定数据

1) 开始日期结束日期介于今天日期之间的数据应位于顶部

2) 其余数据将使用showorder按字段排序


因此,我如何使用一个查询来实现这一点,因为以后我还必须实现分页,所以双查询不合适

您可以在
ORDER BY
中有多个键,包括一个表达式:

SELECT p.*
FROM product p
WHERE p.isdelete = '0' AND p.status = 1 AND
      p.name LIKE '%%' AND categoryid = '4'
ORDER BY (CASE WHEN getdate() BETWEEN start_date AND end_date THEN 1 ELSE 2 END),
         showorder ASC

您可以按的顺序拥有多个键,包括一个表达式:

SELECT p.*
FROM product p
WHERE p.isdelete = '0' AND p.status = 1 AND
      p.name LIKE '%%' AND categoryid = '4'
ORDER BY (CASE WHEN getdate() BETWEEN start_date AND end_date THEN 1 ELSE 2 END),
         showorder ASC

订购后,我们可以使用多个字段:

SELECT * FROM product WHERE isdelete = '0' AND status = 1 AND name LIKE '%%' 
AND categoryid = '4' ORDER BY start_date DESC,end_date DESC,showorder ASC

订购后,我们可以使用多个字段:

SELECT * FROM product WHERE isdelete = '0' AND status = 1 AND name LIKE '%%' 
AND categoryid = '4' ORDER BY start_date DESC,end_date DESC,showorder ASC

您不能使用联合来编写两个查询并将结果合并为一个查询吗?您不能使用联合来编写两个查询并将结果合并为一个查询吗?