Поле даты преобразовано в строку — не разрешает упорядочивать по

#sql #datetime

#sql #дата-время

Вопрос:

Я использую SQL 2008. (на самом деле в asp).

 SELECT  orderId, CONVERT(varchar, orderDate, 101) AS Date_Ordered, CONVERT(varchar, sentDate, 101) AS Date_Shipped, 
FROM orders 
GROUP BY orderId, CONVERT(varchar, o.orderDate, 101), CONVERT(varchar, o.sentDate, 101)
ORDER BY Date_Shipped
  

Хорошо, причина, по которой я использую преобразование в выборе, заключается в том, что мои данные имеют даты с разным временем. но я хочу, чтобы все результаты были за один и тот же день. Поэтому я использовал преобразование.

Моя проблема в том, что я не могу понять, как выполнить порядок по. Я пробовал сортировать по Date_Shipped, но теперь это строка, поэтому она не сортируется должным образом.

Кто-нибудь может помочь?

Комментарии:

1. Потому что его нет в группе по

Ответ №1:

У вас есть SQL Server 2008, поэтому вы можете использовать тип даты

 SELECT
    orderId,
    CONVERT(varchar, orderDate, 101) AS Date_Ordered,
    CONVERT(varchar, CAST(sentDate as date), 101) AS Date_Shipped
FROM orders 
GROUP BY
   orderId, CONVERT(varchar, o.orderDate, 101), CAST(sentDate as date)
ORDER BY
   CAST(sentDate as date)
  

Я не могу точно вспомнить, разрешено ли это, но, надеюсь, вы поняли идею: если нет, используйте это

 SELECT
    orderId,
    Date_Ordered,
    CONVERT(varchar, sentDate2, 101) AS Date_Shipped
FROM
    (
    SELECT
        orderId,
        CONVERT(varchar, orderDate, 101) AS Date_Ordered,
        CAST(sentDate as date) AS sentDate2
    FROM orders o
    GROUP BY
       orderId, CONVERT(varchar, orderDate, 101), CAST(sentDate as date)
    ) foo
ORDER BY
    sentDate2
  

Ответ №2:

 SELECT
  orderId,
  CONVERT(varchar, orderDate, 101) AS Date_Ordered,
  CONVERT(varchar, sentDate, 101) AS Date_Shipped, 
FROM orders 
GROUP BY
  orderId,
  CONVERT(varchar, orderDate, 101),
  CONVERT(varchar, sentDate, 101)
ORDER BY MAX(sentDate)
  

Кстати, o псевдонимы в вашем запросе ошибочны, потому что у вас нет таблицы с таким псевдонимом.