Używam openrowset do importowania pliku csv do SQL Server. Jedna z kolumn w pliku csv zawiera liczby w notacji naukowej (1.08E + 05) i kolumnę w tabeli, do której jest wstawianyKonwersja notacji naukowej na zmiennoprzecinkowe podczas używania OpenRowSet do importowania pliku .CSV
Domyślnie importuje wartość jako 1 i ignoruje .08E + 05.
Próbowałem użyć metody cast() i convert(), aby przekonwertować wartość bezpośrednio podczas wykonywania zapytania, a także ustawić typ danych w tabeli jako ciąg znaków i zaimportować go jako taki. Wszystkie te metody zachowują się tak samo, gdy .08E + 05 jest ignorowane.
Czy istnieje sposób na zaimportowanie wartości jako 108000 zamiast 1 bez .08E + 05 bez konieczności zmiany samego pliku csv?
Konfigurowanie typ danych jako varchar i czytanie w pliku csv wydaje się mieć ten sam efekt z następującego kodu:
CREATE TABLE #dataTemp (StartDate datetime, Value varchar(12))
SET @insertDataQuery = 'SELECT Date, CSVValue from OpenRowset(''MSDASQL'', ''Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir='
SET @insertDataQuery = @insertDataQuery + 'C:\Data\;'',''SELECT * FROM '+ '11091800.csv' + ''')'
INSERT INTO #dataTemp EXEC(@insertDataQuery)
SELECT * FROM #dataTemp
Nie wszystkie wartości w pliku CSV mają notacji naukowej i wartość bez niego, np 81000 natrafia bez problemu.
Właściwie w przypadku teraz, że jestem ponownie czyta pytanie prawdopodobnie można po prostu użyć 'SELECT CONVERT (INT , CONVERT (FLOAT, "1.08E + 05 ')); '- ostatnio pracowałem nad notacją naukową, miałem do czynienia z licznikami wydajności z LogMan, i zdecydowanie potrzebowałem miejsc dziesiętnych ... –
Każde z powyższych rozwiązań działa, jeśli podam wartość wprost. W pliku CSV mam nazwę kolumny dla wartości i jeśli jej używam, na przykład CONVERT (INT, CONVERT (FLOAT, COLUMN_NAME_IN_CSV)) nadal otrzymuję zachowanie, w którym odczytuje tylko pierwszą cyfrę. Myśli? – amarcy
Moje myśli nadal mają na celu wprowadzenie do tabeli varcharów. Może się zdarzyć coś innego, gdy twój insert ... wybierz zapytanie openrowsetowe próbuje dopasować typy tabel do metadanych z zapytania. Jeśli najpierw wstawiasz do varcharu, to nie będzie to miało znaczenia ... –