как сделать заказ по столбцу to_char - PullRequest
0 голосов
/ 04 марта 2010

У меня следующий запрос оракула:

   SELECT a.USER_ID,
           c.first_name,
           c.last_name,
           TO_CHAR( b.logon_date, 'MM/DD/YYYY HH:MI:SS am') logon_date,
           NVL(TO_CHAR( b.logoff_date, 'MM/DD/YYYY HH:MI:SS am'), '') logoff_date,
           a.session_id
      FROM table a,
           table b,
           table c
       WHERE a.row_id >= start_row
               AND a.row_id <= end_row
               AND a.session_id = b.session_id
               AND a.USER_ID = b.USER_ID
               AND a.USER_ID = RTRIM(LTRIM(c.USER_ID))
      ORDER BY logoff_date DESC

запрос работает нормально, если я удаляю order by

Я хочу order результаты этого запроса в DESC порядке, основанном на logoff_date, для которого я использую to_char, чтобы сделать дату со временем в am / pm

Я пытался дать следующее как order_by

NVL(TO_CHAR( b.logoff_date, 'MM/DD/YYYY HH:MI:SS am'), '')

но результаты возвращаются как:

03/03/2010 12:59:37 am
03/03/2010 12:53:12 pm
03/03/2010 12:41:40 pm
03/03/2010 12:19:38 am
03/03/2010 11:34:04 am
03/03/2010 10:41:47 am
03/03/2010 10:16:16 pm
03/03/2010 10:14:45 pm
03/03/2010 09:59:54 am
03/03/2010 07:36:17 pm

1 Ответ

5 голосов
/ 04 марта 2010

В настоящее время вы упорядочиваете по значению вашей даты, потому что logoff_date ссылается на псевдоним logoff_date в select (NVL(TO_CHAR( ...))). Это значение символа обычно упорядочивается в алфавитном порядке и не соответствует порядку столбца DATE.

Если вы хотите сделать заказ по значению ДАТА столбца, вам нужно будет точно указать на него:

ORDER BY b.logoff_date
         ^^
...