Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Два вопроса по формату datetime  [new]
Rustygold
Member

Откуда: СПб
Сообщений: 179
Господа,

Вопрос 1
Сделал view, в которой помимо остального есть 4 поля datetime из разных таблиц:
select tbl1.col1, ..., tbl4.col1, CONVERT(datetime, tbl1.DateCol, 4) AS D1, CONVERT(datetime, tbl2.DateCol, 4) AS D2, CONVERT(datetime, tbl3.DateCol, 4) AS D3, CONVERT(datetime, tbl4.DateCol, 4) AS D4 from tbl1 inner join ... и т.д.

Так вот первые два DateCol столбца (D1, D2) в результате выглядят как 'dd.mm.yy' (по формату '4'), а последние два (D3, D4) - в полном формате вместе со временем ?!
Формат полей в таблицах одинаковый.
Может есть какие идеи? Хотя сам понимаю, что и так должно работать.

Вопрос 2

вычитал тут где-то, что для поиска записей по дате необходимо писать:
select * from tbl where DateCol >= '01.01.2005' and DateCol < '01.02.2005'

а корректно ли использовать?
select * from tbl where CONVERT(datetime, DateCol, 4) = '01.01.05'

и как правильно делать выборки типа:
declare @Date datetime
set @Date = getdate()
select * from tbl where DateCol = @Date -- ?
?

Заранее спасибо.
6 окт 05, 12:18    [1943865]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
ТОП 10. Вопрос 8
6 окт 05, 12:31    [1943948]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
Ultimate
Guest
Rustygold
Господа,

Вопрос 1
Сделал view, в которой помимо остального есть 4 поля datetime из разных таблиц:
select tbl1.col1, ..., tbl4.col1, CONVERT(datetime, tbl1.DateCol, 4) AS D1, CONVERT(datetime, tbl2.DateCol, 4) AS D2, CONVERT(datetime, tbl3.DateCol, 4) AS D3, CONVERT(datetime, tbl4.DateCol, 4) AS D4 from tbl1 inner join ... и т.д.

Так вот первые два DateCol столбца (D1, D2) в результате выглядят как 'dd.mm.yy' (по формату '4'), а последние два (D3, D4) - в полном формате вместе со временем ?!
Формат полей в таблицах одинаковый.
Может есть какие идеи? Хотя сам понимаю, что и так должно работать.

1. Приведите структуру таблиц td3, tbl4- какой тип у полей DateCol
2. Скорее всего у вас так отображает дату клиент.
3. Скорее всего в таблицах td3, tbl4 DateCol хранится со временем (если это тип datetime)
4. Если вам нужна только дата из это поля то CONVERT(datetime, tbl4.DateCol, 4) - загляните в faq.

Скорее всего
Rustygold

Вопрос 2

вычитал тут где-то, что для поиска записей по дате необходимо писать:
select * from tbl where DateCol >= '01.01.2005' and DateCol < '01.02.2005'

а корректно ли использовать?
select * from tbl where CONVERT(datetime, DateCol, 4) = '01.01.05'

и как правильно делать выборки типа:
declare @Date datetime
set @Date = getdate()
select * from tbl where DateCol = @Date -- ?
?

Заранее спасибо.

Вам нужно научится разделять дату и время из поля типа datetime
загяните в faq
https://www.sql.ru/faq/faq_topic.aspx?fid=109
6 окт 05, 12:33    [1943964]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
Rustygold
Member

Откуда: СПб
Сообщений: 179
To Glory:
Glory
ТОП 10. Вопрос 8

- это хорошо, я CONVERT и использую.

Вопрос в том, можно ли использовать, например:
select * from tbl where CONVERT(datetime, DateCol, 4) = CONVERT(datetime, @Date, 4)
чтобы отфильтровать строки по дате, хранимой в переменной?
Будет ли это всегда корректно работать?
6 окт 05, 14:17    [1944655]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
Rustygold
To Glory:
Glory
ТОП 10. Вопрос 8

- это хорошо, я CONVERT и использую.


Вы внимательнее читайте ответы.
Сервер не занимается _отображением даты у клиента_.
Либо вы передаете клиенту datetime и он сам отображает его в нужном формате.
Либо вы на сервере _конвертируете_ datetime в стринг нужного вам формата
6 окт 05, 14:20    [1944671]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
Rustygold
Вопрос в том, можно ли использовать, например:
select * from tbl where CONVERT(datetime, DateCol, 4) = CONVERT(datetime, @Date, 4)
чтобы отфильтровать строки по дате, хранимой в переменной?
Будет ли это всегда корректно работать?

Правильнее будет

select * from tbl where DateCol between @pariod_begin and @period_end
6 окт 05, 14:22    [1944680]     Ответить | Цитировать Сообщить модератору
 Re: Два вопроса по формату datetime  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Rustygold
Будет ли это всегда корректно работать?


Корректно - да, быстро - нет. Создавайте доп. вычисляемый столбец без времени и индекс на него.
6 окт 05, 14:22    [1944685]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить