Предположим, у нас есть следующий столбец из таблицы (тип: символ):
date
Wed May 31 21:00:01 +0000 2017
Wed May 31 20:59:59 +0000 2017
Я пытаюсь отсортировать эту таблицу по возрастанию, но это не сработает, потому что это происходит в алфавитном порядке, учитывая, что тип столбца — character
, а не date
. Есть идеи, как изменить тип в SQL на date
, чтобы он правильно сортировался?
Спасибо!
К сожалению, полный набор данных содержит более миллиона строк. Данные, которые я загрузил, сохранили значение даты в виде строки, а не я делал это намеренно, поэтому мне интересно, есть ли способ преобразовать в тип метки времени?
порядок по приведению (stringFromTable как DateTime). Но это займет ДОЛГОЕ время каждый раз, когда вы запускаете запрос. Вы должны изменить формат в таблице на дату и время. Или создайте второй столбец и обновите его до даты и времени и отформатируйте данные в этом столбце, а затем отсортируйте по нему.
@Брэд, это сработало, спасибо!
@HelpMe, я добавил свой комментарий в качестве ответа, если вы можете его принять.
Преобразование ответа из комментариев, поскольку постер сказал, что это сработало
SELECT *
FROM YourTableName
ORDER BY CAST(DateInStringFormatFromTable as DateTime)
Это займет ДОЛГОЕ время каждый раз, когда вы запускаете запрос.
Вы должны изменить формат в таблице на дату и время. Или создайте второй столбец и обновите его до даты и времени и отформатируйте данные в этом столбце, а затем отсортируйте по нему.
Обновлено, чтобы дать другой вариант на основе комментариев:
Вы можете попробовать преобразовать вместо приведения, чтобы увидеть, работает ли это для вашего уходящего
SELECT *
FROM YourTableName
ORDER BY CONVERT(DATETIME, DateInStringFormatFromTable, 102) DESC
Спасибо! Можете ли вы также указать, как сделать этот возврат в порядке убывания? Я попробовал DESC
в конце запроса, но порядок почему-то не изменился.
ORDER BY CAST(DateInStringFormatFromTable as DateTime) DESC Это должно работать.
Я тоже так думал, но как ни странно
Я протестировал образец таблицы в своей БД (MS SQL 2012), и это сработало. У вас есть DESC вне актерского состава?
Да, вне приведения так странно (с помощью пакета в R Studio для запуска кода SQL). Есть ли альтернативный способ выбрать дату в самой последней строке без использования DESC для перестановки и выбора верхней строки, как обычно?
Как указано выше, вы должны сохранить это как формат даты в своей таблице, так как это сделает все проще. Я обновил свой ответ, чтобы использовать конвертацию, вы можете попробовать это. Если DESC по-прежнему не работает, и если вам просто нужна самая высокая дата (а не какие-либо другие данные), вы можете попробовать это (если это работает, потому что сортировка DESC не работает) выбрать MAX (cast (DateInStringFormatFromTable as DATEIMTE) FromTableName
Отметьте свой вопрос с помощью базы данных, которую вы используете. Также объясните, почему вы сохраняете значение даты в строке, а не используете правильный тип даты и времени/временной метки, который поддерживают все базы данных.