Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 19:08   #1
new player
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 153
По умолчанию Преобразование строки в дату и сортировка выборки по полученной дате

Доброго,

В базе есть поле с датой (в формате 16.01.2015) типа text.
Надо при выборке преобразовать это в дату, чтобы потом отсортировать, иначе сортирует, как строку, и получается неправильно.

SELECT ... (SELECT my_date FROM table_date) AS sort_date ORDER BY sort_date

В SQL не силен, не уверен, что так вообще можно.
Пробовал различные варианты (CAST, CONVERT), но ничего толкового не вышло.
При CAST(my_date as Date) преобразованная дата получается неправильная (14.02.2015 в 2014-02-20)
new player вне форума Ответить с цитированием
Старый 11.02.2015, 19:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

СУБД? Для MS SQL convert() стиль 104
https://msdn.microsoft.com/ru-ru/library/ms187928.aspx
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.02.2015, 19:20   #3
new player
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
СУБД? Для MS SQL convert() стиль 104
https://msdn.microsoft.com/ru-ru/library/ms187928.aspx
Спасибо.

MySql (для сайта)

Уже пробовал как-то так:
CONVERT(varchar(8), my_date , 104)

ошибка в синтаксисе

Последний раз редактировалось new player; 11.02.2015 в 19:26.
new player вне форума Ответить с цитированием
Старый 11.02.2015, 19:29   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Тогда с помощью SUBSTRING_INDEX и CONCAT преобразовать в '2015-01-16', а потом CAST-ом в Date. Это так, навскидку, может чего и попроще есть. Чего сразу не хранить дату в родном формате?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.02.2015, 19:53   #5
new player
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Тогда с помощью SUBSTRING_INDEX и CONCAT преобразовать в '2015-01-16', а потом CAST-ом в Date. Это так, навскидку, может чего и попроще есть. Чего сразу не хранить дату в родном формате?
Спасибо.

В итоге так получилось:
Код:
		CAST(
		CONCAT(
		SUBSTRING_INDEX(osf.shipping_date_delivery, '.', -1),		
		'-',		
		SUBSTRING_INDEX(SUBSTRING_INDEX(shipping_date_delivery, '.', 2), '.', -1),
		'-',
		SUBSTRING_INDEX(osf.shipping_date_delivery, '.', 1) 
		) 
		as Date
		)
А почему не дата, не знаю - в той таблице все в text
new player вне форума Ответить с цитированием
Старый 12.02.2015, 10:33   #6
new player
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 153
По умолчанию

Вот решение проще:

Код:
STR_TO_DATE(osf.shipping_date_delivery, '%d.%m.%Y')
new player вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование текста в ячейке в дату LGM Microsoft Office Excel 5 10.07.2013 16:53
Обработка/разделение строки, полученной из AJAX hron66 JavaScript, Ajax 1 17.04.2013 16:35
Преобразование Int32 в Дату Dr.Pauliss Помощь студентам 1 27.05.2011 07:28
Преобразование строки формата YYYY-MM-DD в дату, Варнинги! XerSon Общие вопросы Delphi 2 25.10.2010 09:19
преобразование дАтЫ в дату suxo Microsoft Office Excel 7 01.06.2010 10:10