Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение даты с MS SQL 2005 [D7, MSSQL]


Страницы:   1 2 3

VadimSpb ©   (2007-12-02 01:25:00) 

Добрый день!
Существует ли возможность вернуть в результате запроса дату в формате дд.мм.гггг (напр., 02.12.2007)? Поле в таблице - DateTime (напр., 02.12.2007 10:00:00).
С ходу решил вопрос двойной конвертацией
SELECT CONVERT(datetime,CONVERT(char(20), Column,104),104) FROM Table
Логика подсказывает, что должен быть более прямой путь :-))


Anatoly Podgoretsky   (2007-12-02 14:00:00) [21]

> VadimSpb  (02.12.2007 13:42:21)  [21]

datepart+datepart+datepart+dateadd
а вернуть в виде дд.мм.гггг можно с помощью convert


Anatoly Podgoretsky   (2007-12-02 13:59:00) [22]

> sniknik  (02.12.2007 13:27:19)  [19]

Как минимум индексы по побоку


Anatoly Podgoretsky   (2007-12-02 13:59:00) [23]

> sniknik  (02.12.2007 13:28:20)  [20]

Посмотри еще convert мощная вещь, но надо понимать.


VadimSpb   (2007-12-02 13:53:00) [24]

Нашел - dy? Нашел, предыдущий вопрос снимается, с датой без времени ясно.
Теперь по группировке. Это действительно более производительный способ для дальнейшего суммирования?


VadimSpb   (2007-12-02 13:42:00) [25]


> sniknik ©   (02.12.07 13:28) [20]

Аргумент datepart в DateDiff позволяет вернуть только одну чать даты: год, день и т.д. А как вернуть дд.мм.гггг?


sniknik   (2007-12-02 13:28:00) [26]

> В БОЛе пока и нашел только по конвертации :-((
DateDiff(d,0,GetDate())


sniknik   (2007-12-02 13:27:00) [27]

> А будет ли быстрее чем при конвертации работать?
тебя не это должно волновать, а то что для получения одного(!) значения у тебя выполняется гигантский подзапрос(даже цепочка) с объединением двух таблиц...
что там время конвертации... оно затеряется в общем, изза неправильной логики, как капля в бочке воды...

> Любые конвертации приводят к резкому снижению производительности.
ну, это только в нормальных случаях...
хотя если конвертации будут еще и множественными, т.е. вставлены внутрь подзапросов, то конечно, из капель ведро наберется.


VadimSpb   (2007-12-02 13:27:00) [28]

В БОЛе пока и нашел только по конвертации :-((
Еще склеить можно, но тоже мне кажется кривой способ.


Anatoly Podgoretsky   (2007-12-02 13:18:00) [29]

> VadimSpb  (02.12.2007 13:12:16)  [16]

Любые конвертации приводят к резкому снижению производительности.
А все что тебе нужно описано в БОЛ


VadimSpb   (2007-12-02 13:12:00) [30]


> Anatoly Podgoretsky ©   (02.12.07 13:05) [15]

Упс..., точно, там сортировка. Надо переделать. Спасибо.
Но вопрос с датой не снимается. Сделать функцией? Вытаскивать отдельно год + мес. + дату? и склеивать? А будет ли быстрее чем при конвертации работать? Нельзя ли сразу возвратить дд.мм.ггг. без времени в временном формате?


Anatoly Podgoretsky   (2007-12-02 13:05:00) [31]

> VadimSpb  (02.12.2007 12:33:14)  [14]

Если ты про последний пример, то никакой группировки не наблюдается


VadimSpb   (2007-12-02 12:33:00) [32]


> Сам подход неверный, смотри ответ sniknik

Стараюсь :-))
1. По дате и группируется. Вопрос - как получить дату без времени?
2. Чем плох приведенный запрос? Считает платежи и начисления всего и по дате. Есть более оптимальный алгоритм?


Anatoly Podgoretsky   (2007-12-02 12:22:00) [33]

> VadimSpb  (02.12.2007 11:47:11)  [11]

Сам подход неверный, смотри ответ sniknik


VadimSpb   (2007-12-02 12:05:00) [34]


> sniknik ©   (02.12.07 11:47) [10]

Вот полный рабочий пример.
SELECT S.Data,
(SELECT ISNULL(SUM(TS.PaymentSum),0)
FROM  Payments AS TS
WHERE TS.PaymentDate<= S.Data) AS All_SUMMA,
(SELECT ISNULL(SUM(TS.PaymentSum),0)
FROM  Payments AS TS
WHERE TS.PaymentDate = S.Data) AS DATA_SUMMA,
(SELECT ISNULL(SUM(DS.Summa),0)
FROM  Debtors AS DS
WHERE DS.Data <= S.Data) AS All_DEBT,
(SELECT ISNULL(SUM(DD.Summa),0)
FROM  Debtors AS DD
WHERE DD.Data = S.Data) AS Data_DEBT
FROM
(SELECT PaymentDate AS Data  FROM Payments
UNION
SELECT Data FROM Debtors) AS S
WHERE
S.Data IS NOT NULL
ORDER BY S.Data


Ранее в БД дата шла без времени, только дата (по умолчанию сервер ставил 0:00:00) и запрос работал нормально. Теперь необходимы данные с временем.

> нужно по дням, ну так и выдели дни из даты и группируй по
> ним


Собственно и вопрос в этом! Дата нужна с годом и месяцем дд.мм.гггг. без часов и минут.
Если получить целую часть при помощи CAST, то он округляет в большую сторону после 12:00, т.е. получается следующий день.


VadimSpb   (2007-12-02 11:47:00) [35]


> ты попробуй хотя бы посчитать количество символов в результате

О том и речь - как сделать иначе?
Я что тут свои решения прославляю?


sniknik   (2007-12-02 11:47:00) [36]

> Упоминание о бреде неконструктивно и неинтересно.
"лечение" и разбор следствий, а не причины еще более неконструктивно и неинтересно.

почему вопрос о получении даты, причем как видно из примера в запросе, когда проблема в группировке?

>> Он, видать, потом группировку по этому сделать хочет
> Да, конечно.
т.е. ты просто не знаеш как группировку в запросе по дате сделать

совет. не трогай дату, оставь ее как есть в запросе, а группируй по функции, нужно по дням, ну так и выдели дни из даты и группируй по ним (собственно дата и есть количество дней с начала точки отсчета)

и совет №2. перепиши "Рабочий пример:". т.к. раз говоришь структура нормальная то значит запрос бредовый...


Anatoly Podgoretsky   (2007-12-02 11:35:00) [37]


> Логика подсказывает, что должен быть более прямой путь :
> -))

Поскольку это CONVERT(char(20) бред, ты попробуй хотя бы посчитать количество символов в результате.


VadimSpb   (2007-12-02 10:29:00) [38]


> Спроектируйте нормально БД, потом можно говорить...

Можете предложить что-то лучше реляционного варианта трех таблиц (Абонент, Платеж, Начисление)?
Упоминание о бреде неконструктивно и неинтересно.


Johnmen   (2007-12-02 02:08:00) [39]

Скажу честно - совершенно неинтересно ковыряться в этом бреде.
Спроектируйте нормально БД, потом можно говорить...


VadimSpb   (2007-12-02 02:04:00) [40]


> Он, видать, потом группировку по этому сделать хочет

Да, конечно.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо