powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка по дате
6 сообщений из 6, страница 1 из 1
Выборка по дате
    #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
Выборка по дате
    #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
Выборка по дате
    #37078394
Valerii,

а если параметры с датами перед передачей преобразовывать с помощью dtos(), то и ничего отрезать и ничего конвертировать не надо будет.
...
Рейтинг: 0 / 0
Выборка по дате
    #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
Выборка по дате
    #37078610
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается, есть еще параметр для миллисекунд. Тогда так

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

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

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


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