2015-11-10 3 views
0

У меня есть эта база данных на SQL Server. Когда я запускаю следующий запрос:RODBC возвращает 0 строк, хотя есть много строк

SELECT * FROM myTable WHERE myDateField <= '2014-12-31'

Я получаю 51618 строк.

Но когда я запускаю тот же запрос из R, используя RODBC, я получаю «< 0 rows> (или 0-length row.names)».

Теперь, скажем, изменить дату:

SELECT * FROM myTable WHERE myDateField <= '2010-01-01'

Тогда я получаю те же результаты, как на SQL Server непосредственно, так и на R (!?).

Я нашел это answer, и поэтому я попытался добавить believeNRows = FALSE и rows_at_time = 1 к моим odbcDriverConnect заявлению. Но это ничего не изменило.

Итак, что же здесь происходит? Я занимаюсь этим почти 24 часа, и у меня совершенно нет идей.

Клиент: CentOS 7.1.1503, R 3.2.1, RODBC 1.3-12

Сервер: Windows Server 2012, SQL Server 2014

+1

Просто чтобы попробовать ... Можете ли вы сделать вид на сервере, который определен вашим запросом, а затем запустить 'select * from your_view' в R? Еще одна вещь, которую нужно сделать, - это перемещать ваш '2010-01-01' ближе к' 2014-12-31', чтобы увидеть, где происходит пробой. –

+0

Ha! Так оно и было. Я продолжал перемещать дату ближе и ближе к 2014-12-31, как вы предложили, и поэтому я выяснил, что проблема заключается в форматировании: почему-то даты интерпретируются как yyyy-dd-mm, когда SQL Server получает запрос от RODBC. Большое спасибо! Теперь выясняем, почему это происходит. – Parzival

+1

https://msdn.microsoft.com/en-us/library/ms189491.aspx –

ответ

2

Первое, что вы можете сделать, это изменить рабочую дату пошагово пока вы не обнаружите шаблон, который приведет к сбою запроса. Возможно (для будущих читателей) проблема заключается в том, что SQL Server ожидает формат, отличный от стандарта. Если это так, то запрос на первый день первого месяца (только по совпадению) вернет правильный результат. Вы можете использовать set dateformat, чтобы получить SQL Server для принятия необходимого вам формата.