Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Конкатенация в запросе к базе DBF


Автор: timondrik 2.7.2014, 09:17
Доброго времени суток! Прошу у спецов помощи в решении проблемы возникшей в процессе выверки баз данных.
Имеются 2 dbf файла. Программист до меня сволочь из даты взятия сделал целочисленное поле только под год (о чем он думал понятия не имею), то есть передо мной только год взятия, а месяц и день соответственно я не знаю. Каждый конец отчетного месяца эта база резервится в архив (тупо в папку по месяцам раскладывается). Передо мной очень часто стоит задача искать людей взятых за определенный месяц, из за чего постоянно приходится брать один месяц и сверять его с другим перебором (так как инфа там с нарастающим итогом), результатом чего получается dbf в котором люди взятые именно за нужный мне месяц или период месяцев. Перебор достаточно долгий (более 20 т. записей от 10 до 15 мин.) и это очень не удобно. Я решил сделать эту задачу как и в MSSQL:

SQL
SELECT * FROM tbl2.dbf WHERE fio + bdate not in (SELECT fio + bdate FROM tbl1.dbf) 


Так задача выполняется за секунды.

А вот теперь сама проблема. Конкатенация типа СТРОКА + СТРОКА выполняется успешно, но у меня поле типа Date, в следствии чего запрос выдает ошибку "Operator/operand type mismatch". Почему он не может строку с датой соединить? Других вариантов построения запроса я не вижу, чтобы было быстрее или хотя бы не хуже данного варианта. Очень надеюсь на помощь более оснащенных в этом вопросе людей.

Автор: timondrik 2.7.2014, 09:43
Стоит попросить помощи и ответ найдется сам. Решил проблему так:

Код

SELECT * FROM tbl2.dbf WHERE fio + cast(bdate AS varchar(10)) not in (SELECT fio + cast(bdate AS varchar(10)) FROM tbl1.dbf)


Перевел строку перед конкатенацией. Всем спасибо за внимание smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)