powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с sql запросом
7 сообщений из 7, страница 1 из 1
Проблема с sql запросом
    #39806452
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, всем!

Подскажите пожалуйста со следующим вопросом.
Есть поле у меня datetime .
Надо проверить его на пустоту. Вопрос очень несложный я понимаю, но что -то не могу понять.
Т.е. хочу такое написать:
where kart.dtsmp is not EMPTY()
но это неправильно- выдает ошибку.

и второе в этом же духе:
это все должно быть, если второе текстовое поле больше равно 2019 года.

т.е. второе поле - dtprov >= 2019
типа такого написать.

Все в одном запросе.

SELECT kart.*;
from kart
where kart.dtsmp is not EMPTY()
and kart.dtsmp>= dtprov
into smp.dbf

Спасибо заранее большое.
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806501
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
... where  !EMPTY(kart.dtsmp) ...
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806510
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использовать в условии WHERE функции можно, но не желательно, поскольку они, как правило, не оптимизируются. Т.е. будут тормозить запрос. В данном случае лучше использовать переменную. Даты вполне сравниваются на больше/меньше и, очевидно, не пустая дата всегда будет больше пустой


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
* Пустая дата в FoxPro - это 2 фигурные скобки без данных
emptyDate = {}

* Если нужен именно тип DateTime
* emptyDateTime = DTOT({})

yearValue = 2019

SELECT kart.*;
from kart ;
where kart.dtsmp > m.emptyDate ;
    and kart.dtprov >= m.yearValue ;
into smp.dbf
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806560
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо Дмитрий и Владимир!

За детальное объяснение данного вопроса. Все понял.
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806565
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извинюсь, написал, что вроде бы понял, а нет. Есть вопрос.
У меня выдается ошибка в запросе.

SELECT kart.*;
from kart ;
where kart.dtsmp > m.emptyDate
AND TTOD(kart.dtgosp) >= m.yearValue;



я не очень понимаю тут:
AND TTOD(kart.dtgosp) >= m.yearValue - ошибка в этой строке.

kart.dtgosp - тип datetime
yearValue = 2019 - строковый тип.

Я и последний тип перегоняю в строковый тоже не отрабатывает.
Т.е. у меня не работает (на правильно отрабатывает строка):
AND TTOD(kart.dtgosp) >= m.yearValue т.е. выдают записи где год и 2016 и т.д. - что неверно.
Подскажите пожалуйста.

Спасибо.
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806574
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dima_18я не очень понимаю тут:
AND TTOD(kart.dtgosp) >= m.yearValue - ошибка в этой строке.

kart.dtgosp - тип datetime
yearValue = 2019 - строковый тип.
при сравнении оба операнда должны быть одного типа, т.е. или yearValue числовой и берем год из даты
Код: sql
1.
AND year(kart.dtgosp) >= m.yearValue 


или yearValue должно быть datetime
Код: sql
1.
2.
3.
yearValue = datetime(<year>, 1, 1)
...
AND kart.dtgosp >= m.yearValue 


Вместо <year> подставь переменную откуда год берется
...
Рейтинг: 0 / 0
Проблема с sql запросом
    #39806636
dima_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima_T!

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


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