Вниз
Скачать: CL | DM;

Поиогите разобраться с SQL запросом   Найти похожие ветки 

← →
Krechetov ©   (2004-05-18 06:26) [0]

Доброго времени суток!
Вопрос в следующем:
Имеется поле типа Integer, положительные и отрицательные значения.
Делаю запрос:
SELECT * FROM  WORK
WHERE DATEDIFF (DAY, LASTACTIONTIME, GETDATE()) <= :par_devday AND ((DEV_UNLD >= :par_dev) OR (-DEV_UNLD >= :par_dev))
ORDER BY LASTACTIONTIME

Выдает только положительные значения!
Если вместо параметра "par_dev" подставить числа допустим 200 все прекрасно работает, выдает результат числа все что больше 200 и меньше -200.
Понимаю что ошибка где-то в запросе, но где непойму.
Подскажите кто знает или встречался с таким.
Премного благодарен!!!


← →
Krechetov ©   (2004-05-18 07:14) [1]

Все вопрос можно закрыть!
Ответ найден, если кому интересно:
SELECT * FROM  WORK
WHERE DATEDIFF (DAY, LASTACTIONTIME, GETDATE()) <= :par_devday AND abs(DEV_UNLD) >= :par_dev ORDER BY LASTACTIONTIME


← →
KSergey ©   (2004-05-18 08:18) [2]

Просто совет: никогда не используйте параметр дважды в запросе
Если он нужен не один раз - делаем так:

DECLARE @par1 int
SET @par1=:param1

SELECT.... - здесь уже используем @par1 столько раз, сколько нужно


← →
sniknik ©   (2004-05-18 08:31) [3]

первый запрос лутше, если хочеш чтобы индекс по полю DEV_UNLD использовался, хотя бы в одном условии.
по второму и первое и второе условие вычисляемые, а это полный скан таблицы всегда.
в первом хоть и с ошибкой но логика чуть лутше, надо просто ошибки исправить.
а так и по полю LASTACTIONTIME индекс будет работать (если они конечно есть эти индексы ;), если нет то к чему волноватся, в любом случае полный скан таблицы ;о))
SELECT * FROM WORK
WHERE LASTACTIONTIME >= GETDATE()-:par_devday AND NOT (DEV_UNLD BETWEEN :par_dev1 AND :par_dev2)
ORDER BY LASTACTIONTIME
вот, должно быть лутше (быстрее на больших обьемах, в случае с индексами). параметров должно быть обязательно два (1 = -200, 2 = 200) т.к. наверное используется ADO (?) он в отличии от BDE не понимает дубли в названиях параметров (ссылка по имени присвоит значении первому, второй неинициализируется).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
3-1084763354
ss300
2004-05-17 07:09
2004.06.06
Trigger


4-1082705450
lock95
2004-04-23 11:30
2004.06.06
Поиск компонентов на форме


6-1081140685
lena19
2004-04-05 08:51
2004.06.06
сервер. отправка всем клиентам


1-1085504186
Mameluke
2004-05-25 20:56
2004.06.06
Работа с MS Word


3-1084539243
Fishka
2004-05-14 16:54
2004.06.06
В ComboBox-е для каждого Item свой Hint




   Наверх