|
Выборка по дате
|
|||
---|---|---|---|
#18+
Народ, Есть таблица продаж на сервере MS SQL, где фиксируется дата и время продажи в столбце data формате: data 2011-01-25 17:46:42.000 2011-01-25 17:48:14.000 2011-01-25 17:49:19.000 .... есть форма с контролами календарь, по которыму строится период отчета - то есть нужно дернуть продажи за период, где значениями являются тип Дата в формате с 25.01.2011 по 25.01.2011. Эти даты передаются параметрами в ХП на сервере которя и дергает еэти данные. Дергаю процедуру CREATE PROCEDURE dbo.SalesByPeriod @pStDate DateTime, @pEndDate DateTime SELECT id_goods, data, quantity FROM SALES WHERE convert(VARCHAR(10), data, 104) Between @pBeforeStDate AND @pBeforeEndDate а в ответ ничего, хотя продажи за 25 число есть. Где ошибка?!!! Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2011, 19:54 |
|
Выборка по дате
|
|||
---|---|---|---|
#18+
Вы путаете способ хранения и способ отображения даты. В данном случае, Вы отсекаете часть со временем путем преобразования даты в символьную строку, ожидая, что обратное преобразование из символьной строки в дату MS SQL сервер выполнит автоматически. Да. Он выполнит, но КАК он интерпретирует ту символьную строку, которую Вы ему предложите? Почему Вы ожидаете, что MS SQL сервер строку вида "01.02.03" интепретирует как ДД.ММ.ГГ? А почему не как ГГ.ДД.ММ? Вероятно, это будет зависеть от неких настроек среды? А стоит ли писать код, заведомо зависимый от каких-то настроек? Существует универсальный формат строки, который MS SQL сервер интерпретирует однозначно, вне зависимости от настроек среды. Это формат вида ГГГГММДД. Для приведения к этому формату следует использовать код 112 Код: plaintext
Для справки : В MS SQL формат даты может задаваться не явно настройкой SET LANGUAGE или явно настройкой SET DATEFORMAT Однако повторюсь: по возможности, код процедуры не должен зависеть от региональных настроек. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2011, 20:31 |
|
Выборка по дате
|
|||
---|---|---|---|
#18+
Valerii, а если параметры с датами перед передачей преобразовывать с помощью dtos(), то и ничего отрезать и ничего конвертировать не надо будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2011, 21:10 |
|
Выборка по дате
|
|||
---|---|---|---|
#18+
проходящий.а если параметры с датами перед передачей преобразовывать с помощью dtos(), то и ничего отрезать и ничего конвертировать не надо будет. Тут речь идет об отрезании части со временем не из параметра, а из поля таблицы. Тут правильнее было бы задать параметры от 2011-01-25 00:00:00 до 2011-01-25 23:59:59 Ну, если уж передает в качестве параметра только дату, то прибавить ко второму параметру 24 часа без 1 секунды Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2011, 01:19 |
|
Выборка по дате
|
|||
---|---|---|---|
#18+
Оказывается, есть еще параметр для миллисекунд. Тогда так Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2011, 01:24 |
|
Выборка по дате
|
|||
---|---|---|---|
#18+
ВладимирМ, Спасибо за хорошие советы, помогло корректное кнвертирование, хотя и самлм запросе (довольно-таки емкий) была концептуальная ошибка отбора данных, поэтому я и нарвался на одну проблема, а как оказалось была еще и та что Вы, Владимир подсказали. Еще раз всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2011, 13:03 |
|
|
start [/forum/topic.php?fid=41&msg=37078610&tid=1584601]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 439ms |
0 / 0 |