Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка по дате / 6 сообщений из 6, страница 1 из 1
25.01.2011, 19:54
    #37078332
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по дате
Народ,
Есть таблица продаж на сервере 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 число есть.
Где ошибка?!!!
Всем спасибо.
...
Рейтинг: 0 / 0
25.01.2011, 20:31
    #37078355
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по дате
Вы путаете способ хранения и способ отображения даты.

В данном случае, Вы отсекаете часть со временем путем преобразования даты в символьную строку, ожидая, что обратное преобразование из символьной строки в дату MS SQL сервер выполнит автоматически.

Да. Он выполнит, но КАК он интерпретирует ту символьную строку, которую Вы ему предложите? Почему Вы ожидаете, что MS SQL сервер строку вида "01.02.03" интепретирует как ДД.ММ.ГГ? А почему не как ГГ.ДД.ММ? Вероятно, это будет зависеть от неких настроек среды? А стоит ли писать код, заведомо зависимый от каких-то настроек?

Существует универсальный формат строки, который MS SQL сервер интерпретирует однозначно, вне зависимости от настроек среды. Это формат вида ГГГГММДД. Для приведения к этому формату следует использовать код 112

Код: plaintext
WHERE convert(VARCHAR( 10 ), data,  112 ) Between @pBeforeStDate AND @pBeforeEndDate


Для справки :

В MS SQL формат даты может задаваться не явно настройкой SET LANGUAGE или явно настройкой SET DATEFORMAT

Однако повторюсь: по возможности, код процедуры не должен зависеть от региональных настроек.
...
Рейтинг: 0 / 0
25.01.2011, 21:10
    #37078394
Выборка по дате
Valerii,

а если параметры с датами перед передачей преобразовывать с помощью dtos(), то и ничего отрезать и ничего конвертировать не надо будет.
...
Рейтинг: 0 / 0
26.01.2011, 01:19
    #37078606
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по дате
проходящий.а если параметры с датами перед передачей преобразовывать с помощью dtos(), то и ничего отрезать и ничего конвертировать не надо будет.
Тут речь идет об отрезании части со временем не из параметра, а из поля таблицы. Тут правильнее было бы задать параметры

от 2011-01-25 00:00:00 до 2011-01-25 23:59:59

Ну, если уж передает в качестве параметра только дату, то прибавить ко второму параметру 24 часа без 1 секунды

Код: plaintext
1.
2.
3.
4.
set nocount on;
set @pEndDate = dateAdd(second, ( 24 * 60 * 60  -  1 ), @pEndDate)

SELECT id_goods, data, quantity FROM SALES
WHERE data Between @pBeforeStDate AND @pBeforeEndDate
...
Рейтинг: 0 / 0
26.01.2011, 01:24
    #37078610
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по дате
Оказывается, есть еще параметр для миллисекунд. Тогда так

Код: plaintext
set @pEndDate = dateAdd(millisecond, ( 24 * 60 * 60  *  1000  -  1 ), @pEndDate)
...
Рейтинг: 0 / 0
28.01.2011, 13:03
    #37084081
Valerii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка по дате
ВладимирМ,

Спасибо за хорошие советы, помогло корректное кнвертирование, хотя и самлм запросе (довольно-таки емкий) была концептуальная ошибка отбора данных, поэтому я и нарвался на одну проблема, а как оказалось была еще и та что Вы, Владимир подсказали.

Еще раз всем спасибо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка по дате / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]