2014-12-11 8 views
5

Mam bazę danych SQL (2012), do której próbuję uzyskać dostęp przez R (R Studio). Od Enterprise Manager to właśnie wygląda:Zarządzanie RODBC datami z serwera SQL

select top 5[date],value from dbo.history 

1991-02-11 11.1591 

1991-02-12 11.2 

1991-02-13 11.3501 

1991-02-14 11.37 

1991-02-15 11.3002 

Jednak z badań jest to, co mam:

sqlQuery(DF_CN,'select top 5 [date],value from dbo.history') 
     date value 
1 0011-02-19 11.16 

2 0012-02-19 11.20 

3 0013-02-19 11.35 

4 0014-02-19 11.37 

5 0015-02-19 11.30 

Gdy próbuję i zaznaczyć wszystkie dane z tabeli, to co mam

sqlQuery(DF_CN,'select * from dbo.history') 
Error in charToDate(x) : 
    character string is not in a standard unambiguous format 

to może być coś o domyślnym formacie rrrr-mm-dd z serwera SQL, które mogę zmienić, jeśli mogę użyć CONVERT, ale to wygląda jak hack i SELECT * ran Nie działam.

Czy jest coś, co mogę zrobić, aby rozpoznać daty programu SQL Server?

Ben


To doprowadza mnie do szału - na pewno ktoś widział tego wcześniej - istnieje wyraźny rozdźwięk między wyjściem SQL Server i co R czyta.

Używam programów RStudio 0.98.1091 i R x64 3.1.2. SQL Server 2014 Microsoft SQL Server Management Studio 12.0.2000.8 Microsoft Data Access Components (MDAC) 6.1.7601.17514 Microsoft MSXML 3,0 4,0 6,0 Microsoft Internet Explorer 9.10.9200.17148 Microsoft .NET Framework 4.0.30319.18444 System operacyjny 6.1. 7601

Sterownik ODBC 11 dla SQL Server.

Wszystko wygląda na bieżąco w moim systemie.

kolumna [date] była typu DATE, jest teraz DATETIME. Teraz to rozumiem;

sqlQuery(DF_CN,('select * from dbo.history') 

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

Wygląda na to, że niektóre rozłączają się między konfiguracją serwera SQL a konfiguracją R.

+0

Czy przechowywania dat jako wartości datetime lub wartości VARCHAR w tabeli SQL? W przypadku tych ostatnich rozważ zmianę ich na wartości DATETIME, które powinny być lepiej obsługiwane przez R. – Dan

+0

Daty są zapisywane jako DATETIME w bazie danych SQL Server –

Odpowiedz

4

Zrobiłem to.

Sterownik ustawiony na serwer SQL Klient natywny 11.0 Ustawienia ODBC - Use regional settings when outputting currency, numbers, dates and times wyłączone.

Myślę, że SQL Server ma własne pomysły na ustawienia regionalne, a nie to, co zostało dostarczone przez Windows, powodując wielkie zamieszanie.

+0

Dzięki za poświęcenie czasu, aby wrócić i opublikować odpowiedź, uczyniłeś internet mądrym miejscem :). Typy danych SQL Server 'DATE' i' DATETIME' _ nie mają formatu. To tylko wtedy, gdy je wybierzesz, możesz je sformatować. Idealnie nie pozwoliłbyś, aby dane te były niczym innym niż tymczasowym typem danych, więc nigdy nie będziesz mieć tego problemu. Jednak przy przenoszeniu danych między różnymi systemami jest to częsty problem. Wygląda na to, że dane między sterownikiem Native Client a R są przekształcane na ciąg znaków. –

+0

Zmieniłem ustawienia, jak wspomniano powyżej, a nawet zastosowałem 'as.is = T', ale nadal otrzymuję błąd – Pb89

5

Pracowałem go za pomocą parametru as.is:

sqlQuery(DF_CN,'select * from dbo.history',as.is=T) 

Następnie rzucając mi potrzebne wartości bezpośrednio w R.

+0

Wielkie dzięki za tę sugestię, jej prace w moim przypadku! :) – user2851376