PDA

Показать полную графическую версию : Форматирование запроса SQL


ValVlaGen
18-11-2008, 13:34
Поскажите плиз. Допустим имеется таблица d с полем date типа date вот. Каким образом можно представить все эти дни в виде таблицы из 7 столбцов, где каждая строка представляет собой неделю от понедельника до воскресенья. ну что то типа:

Пон. Втор. Среда. Четв. Пятн. Суб. Вос.
null null null 1950-05-01 1950-05-02 1950-05-03 1950-05-04

Заранее благодарен за ответы.

Coutty
18-11-2008, 14:34
Может быть что-то вроде этого:
SELECT `date` AS 'Четв.' FROM `d` WHERE DATEDIFF(day, '1950-05-01', `date`)%7=0;
Здесь только для одного дня недели, но уж если будет работать, то сами разберётесь как все семь вывести :)
Функция DATEDIFF() в теории считает количество (дней в данном случае) между первой и второй датой. Далее - берём остаток от деления на 7. Если равен нулю, то такой-то день (хз какой, может быть четверг, может, понедельник или что-то другое. Там видно будет), если единице - следующий .
Подробнее про DATEDIFF() (http://msdn.microsoft.com/ru-ru/library/ms189794.aspx).

Проверить не могу, т.к. нет ни MS-SQL-сервера, ни желания заполнять таблицу значениями.

ValVlaGen
18-11-2008, 15:08
Спасибо конечно, но что то подобное я могу сам написать причем еще проще:

SELECT date AS 'Четв.' FROM d WHERE DATEPART(dw,d.date)=3 ;

Меня же как раз интересует вопрос представления всех этих дней в виде таблицы:

Пон. Втор. Среда. Четв. Пятн. Суб. Вос.
null null null 1950-05-01 1950-05-02 1950-05-03 1950-05-04
1950-05-05 1950-05-06 1950-05-01 1950-05-07 1950-05-08 1950-05-09 1950-05-10
и т.д.

Вот в чем дело. Все еще жду ваших предложений.

Busla
18-11-2008, 19:02
ValVlaGen, а смысл? - сервер возвращает данные. За их красивое отображение отвечает клиент.

ValVlaGen
19-11-2008, 07:31
ValVlaGen, а смысл? »

Классное решение!! :biggrin: :up

vadimiron
19-11-2008, 10:10
ValVlaGen,
Решайте клиентов.... Пусть база вернёт все даты, но отсортированные по возрастанию - и теперь достаточен всего один while, чтобы построить нужную вам таблицу (так как даты отсортированы - там точно идут дни по порядку)

Delirium
24-11-2008, 01:24
ValVlaGen, ваш запрос "перевернуть" на стороне сервера не получится, подобное "транспонирование" можно, как уже указали, сделать только на стороне клиента, при отображении.

ValVlaGen
24-11-2008, 09:44
Я уже решил данную задачу на стороне сервера. У меня другой вопрос как можно написать запрос на изменение порядка слов на обратный. Например есть текстовое поле Мама мыла раму, а на выходе запрос выдавал бы раму мыла Мама. Высказывайте свои идеи господа.

Delirium
25-11-2008, 00:47
У меня другой вопрос как можно написать запрос на изменение порядка слов на обратный »
ValVlaGen, а зачем эти танцы с бубном на сервере? Зачем лишний раз насиловать, не проще на клиенте это сделать? Ваш вариант возможно сделать при использовании процедуры или самописной функции, но зачем?

ValVlaGen
26-11-2008, 08:52
ValVlaGen, а зачем эти танцы с бубном на сервере? »
Нет ну какие умные и отзывчивые люди мне отвечают. Вместо конкретной помощи в решении поставленной задачи, мне говорят: Да зачем тебе это?

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

Delirium
26-11-2008, 08:58
ValVlaGen, никто не нравоучал вас. Просто, хотя бы примерно зная, для чего такие сложности, и ответы могут быть разными. Один вариант я вам уже привел, но, видимо, дальше бубна вы не читали.
Создаете процедуру, в ней 2 переменных - в первой весь текст, во вторую будут падать "слова". Запоминаем позиции пробелов в цикле и потом выдергиваем слова с конца до начала, записывая результат во вторую переменную. Итоговый результат можно ложить куда угодно. Это в теории. Если теория подойдет, могу создать примерную процедуру.

ValVlaGen
26-11-2008, 12:27
Стоит задача написать этот механизм изменения порядка слов именно с помошью одного только запроса.




© OSzone.net 2001-2012