Как преобразовать столбец таблицы в тип даты в SQL и расположить в порядке возрастания?

Предположим, у нас есть следующий столбец из таблицы (тип: символ):

date
Wed May 31 21:00:01 +0000 2017
Wed May 31 20:59:59 +0000 2017

Я пытаюсь отсортировать эту таблицу по возрастанию, но это не сработает, потому что это происходит в алфавитном порядке, учитывая, что тип столбца — character, а не date. Есть идеи, как изменить тип в SQL на date, чтобы он правильно сортировался?

Спасибо!

Отметьте свой вопрос с помощью базы данных, которую вы используете. Также объясните, почему вы сохраняете значение даты в строке, а не используете правильный тип даты и времени/временной метки, который поддерживают все базы данных.

Gordon Linoff 10.12.2020 19:38

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

HelpMe 10.12.2020 19:40

порядок по приведению (stringFromTable как DateTime). Но это займет ДОЛГОЕ время каждый раз, когда вы запускаете запрос. Вы должны изменить формат в таблице на дату и время. Или создайте второй столбец и обновите его до даты и времени и отформатируйте данные в этом столбце, а затем отсортируйте по нему.

Brad 10.12.2020 19:44

@Брэд, это сработало, спасибо!

HelpMe 10.12.2020 19:51

@HelpMe, я добавил свой комментарий в качестве ответа, если вы можете его принять.

Brad 10.12.2020 20:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Преобразование ответа из комментариев, поскольку постер сказал, что это сработало

SELECT *
FROM YourTableName
ORDER BY CAST(DateInStringFormatFromTable as DateTime)

Это займет ДОЛГОЕ время каждый раз, когда вы запускаете запрос.

Вы должны изменить формат в таблице на дату и время. Или создайте второй столбец и обновите его до даты и времени и отформатируйте данные в этом столбце, а затем отсортируйте по нему.

Обновлено, чтобы дать другой вариант на основе комментариев:

Вы можете попробовать преобразовать вместо приведения, чтобы увидеть, работает ли это для вашего уходящего

SELECT *
FROM YourTableName
ORDER BY CONVERT(DATETIME, DateInStringFormatFromTable, 102) DESC 

Спасибо! Можете ли вы также указать, как сделать этот возврат в порядке убывания? Я попробовал DESC в конце запроса, но порядок почему-то не изменился.

HelpMe 10.12.2020 20:09

ORDER BY CAST(DateInStringFormatFromTable as DateTime) DESC Это должно работать.

Brad 10.12.2020 20:11

Я тоже так думал, но как ни странно

HelpMe 10.12.2020 20:14

Я протестировал образец таблицы в своей БД (MS SQL 2012), и это сработало. У вас есть DESC вне актерского состава?

Brad 10.12.2020 20:16

Да, вне приведения так странно (с помощью пакета в R Studio для запуска кода SQL). Есть ли альтернативный способ выбрать дату в самой последней строке без использования DESC для перестановки и выбора верхней строки, как обычно?

HelpMe 10.12.2020 20:28

Как указано выше, вы должны сохранить это как формат даты в своей таблице, так как это сделает все проще. Я обновил свой ответ, чтобы использовать конвертацию, вы можете попробовать это. Если DESC по-прежнему не работает, и если вам просто нужна самая высокая дата (а не какие-либо другие данные), вы можете попробовать это (если это работает, потому что сортировка DESC не работает) выбрать MAX (cast (DateInStringFormatFromTable as DATEIMTE) FromTableName

Brad 10.12.2020 20:50

Другие вопросы по теме