Работа с датой, база MSSQL
От: EyfelFenk Россия  
Дата: 05.09.05 07:27
Оценка:
Есть такой запрос:

SELECT     SUM(CF_BOND_OPERATION.END_DEBT_NOMINAL) AS summa, CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104) AS dateEnd
FROM         CF_BOND_OPERATION INNER JOIN

                     CF_BOND_ISSUE ON CF_BOND_OPERATION.BOND_NUM = CF_BOND_ISSUE.BOND_NUM INNER JOIN
                     CF_TYPE_DEBT ON CF_BOND_ISSUE.TYPE_DEBT = CF_TYPE_DEBT.CODE
WHERE     (CF_TYPE_DEBT.CODE = 2)
GROUP BY CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104)


Все бы хорошо, но он почему то не конвертит дату, хотя ошибок не выдает =(
Мне нужно, чтобы дата была в формате dd.MM.yyyy
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Работа с датой, база MSSQL
От: Macr0s Россия  
Дата: 05.09.05 07:42
Оценка:
Здравствуйте, EyfelFenk, Вы писали:

EF>Есть такой запрос:


EF>
EF>SELECT     SUM(CF_BOND_OPERATION.END_DEBT_NOMINAL) AS summa, CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104) AS dateEnd
EF>FROM         CF_BOND_OPERATION INNER JOIN

EF>                     CF_BOND_ISSUE ON CF_BOND_OPERATION.BOND_NUM = CF_BOND_ISSUE.BOND_NUM INNER JOIN
EF>                     CF_TYPE_DEBT ON CF_BOND_ISSUE.TYPE_DEBT = CF_TYPE_DEBT.CODE
EF>WHERE     (CF_TYPE_DEBT.CODE = 2)
EF>GROUP BY CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104)
EF>


EF>Все бы хорошо, но он почему то не конвертит дату, хотя ошибок не выдает =(

EF>Мне нужно, чтобы дата была в формате dd.MM.yyyy

Я так понял, нужно дату преобразовать в строку, тогда:
Ошибка вот тут:

 CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104)

Нужно ставить тот тип, к которому приводишь.
 CONVERT(varchar(30), CF_BOND_OPERATION.END_DATE, 104)
Перед тем, как улучшиться, ситуация ухудшается. (из законов Мерфи)
Re[2]: Работа с датой, база MSSQL
От: EyfelFenk Россия  
Дата: 05.09.05 07:51
Оценка:
Здравствуйте, Macr0s, Вы писали:

M>Я так понял, нужно дату преобразовать в строку, тогда:

M>Ошибка вот тут:

M>
M> CONVERT(DATETIME, CF_BOND_OPERATION.END_DATE, 104)
M>

M>Нужно ставить тот тип, к которому приводишь.
M>
M> CONVERT(varchar(30), CF_BOND_OPERATION.END_DATE, 104)
M>


..хм.. да заработало, но мне потом еще нужно по этой дате условие делать... то есть мне надо после этого опять его в дату сконвертить, например, для того чтобы выбрать начиня с 01.01.2005?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Работа с датой, база MSSQL
От: tpg Россия http://www.sql.ru/
Дата: 05.09.05 07:55
Оценка: 2 (2)
Здравствуйте, EyfelFenk, Вы писали:

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


http://www.sql.ru/faq/faq_topic.aspx?fid=109
Re[3]: Работа с датой, база MSSQL
От: Macr0s Россия  
Дата: 05.09.05 07:58
Оценка:
Здравствуйте, EyfelFenk, Вы писали:


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


Ну по идее — да. А зачем тебе надо дату в строку преобразовывать? Ты же во вьюху выборку делаешь?
А преобразование строки в дату делается обраиным методом:
convert (datetime,'11.01.2005')
Перед тем, как улучшиться, ситуация ухудшается. (из законов Мерфи)
Re[4]: Работа с датой, база MSSQL
От: EyfelFenk Россия  
Дата: 05.09.05 07:59
Оценка:
Здравствуйте, tpg, Вы писали:

tpg>Здравствуйте, EyfelFenk, Вы писали:


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


tpg>http://www.sql.ru/faq/faq_topic.aspx?fid=109


всем спасибо =)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Работа с датой, база MSSQL
От: EyfelFenk Россия  
Дата: 05.09.05 08:01
Оценка:
Здравствуйте, Macr0s, Вы писали:

M>Здравствуйте, EyfelFenk, Вы писали:



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


M>Ну по идее — да. А зачем тебе надо дату в строку преобразовывать? Ты же во вьюху выборку делаешь?

M>А преобразование строки в дату делается обраиным методом:
M>
M>convert (datetime,'11.01.2005')
M>


мне надо обрудить у даты время и делать сравнение в суловии where тока по дате, без времени....

вот сделал таким изратом

SELECT     SUM(CF_BOND_OPERATION.END_DEBT_NOMINAL) AS summa, CONVERT(datetime, CONVERT(varchar(30), CF_BOND_OPERATION.END_DATE, 104), 
                      104) AS dateEnd
FROM         CF_BOND_OPERATION INNER JOIN
                      CF_BOND_ISSUE ON CF_BOND_OPERATION.BOND_NUM = CF_BOND_ISSUE.BOND_NUM INNER JOIN
                      CF_TYPE_DEBT ON CF_BOND_ISSUE.TYPE_DEBT = CF_TYPE_DEBT.CODE
WHERE     (CF_TYPE_DEBT.CODE = 2) AND (CONVERT(datetime, CONVERT(varchar(30), CF_BOND_OPERATION.END_DATE, 104), 104) < CONVERT(datetime, 
                      '01.09.2005', 104))
GROUP BY CONVERT(datetime, CONVERT(varchar(30), CF_BOND_OPERATION.END_DATE, 104), 104)


если кто-то знает как проще буду рад =)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Работа с датой, база MSSQL
От: tpg Россия http://www.sql.ru/
Дата: 05.09.05 08:05
Оценка:
Здравствуйте, EyfelFenk, Вы писали:

EF>мне надо обрудить у даты время и делать сравнение в суловии where тока по дате, без времени....


http://www.sql.ru/faq/faq_topic.aspx?fid=110

Но, если есть индекс и хочется его использовать, то лучше так не делать, а делать выборку в диапазоне.
Re[6]: Работа с датой, база MSSQL
От: EyfelFenk Россия  
Дата: 05.09.05 08:16
Оценка:
Здравствуйте, tpg, Вы писали:

tpg>Здравствуйте, EyfelFenk, Вы писали:


EF>>мне надо обрудить у даты время и делать сравнение в суловии where тока по дате, без времени....


tpg>http://www.sql.ru/faq/faq_topic.aspx?fid=110


tpg>Но, если есть индекс и хочется его использовать, то лучше так не делать, а делать выборку в диапазоне.


у меня жестроке условие как выяснилось то есть строго равно определенной дате тогда впринципе можно и не конверить заного а дату, а сравнивать varchar =)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Работа с датой, база MSSQL
От: tpg Россия http://www.sql.ru/
Дата: 05.09.05 08:26
Оценка: +1
Здравствуйте, EyfelFenk, Вы писали:

EF>Здравствуйте, tpg, Вы писали:


tpg>>Здравствуйте, EyfelFenk, Вы писали:


EF>>>мне надо обрудить у даты время и делать сравнение в суловии where тока по дате, без времени....


tpg>>http://www.sql.ru/faq/faq_topic.aspx?fid=110


tpg>>Но, если есть индекс и хочется его использовать, то лучше так не делать, а делать выборку в диапазоне.


EF>у меня жестроке условие как выяснилось то есть строго равно определенной дате тогда впринципе можно и не конверить заного а дату, а сравнивать varchar =)


OK!

А теперь сравните план, а заодно и стоимость, вот этих двух запросов:


use Northwind
GO
select * from dbo.Orders
    where OrderDate >='19961007'
    and OrderDate <'19961008'
GO
select * from dbo.Orders
    where convert(varchar, OrderDate, 112)='19961007'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.