Sto utilizzando openrowset per importare un file csv in SQL Server. Una delle colonne nel file csv contiene numeri in notazione scientifica (1.08E + 05) e la colonna nella tabella in cui viene inseritaConverte notazione scientifica in virgola mobile quando si utilizza OpenRowSet per importare un file .CSV
Per impostazione predefinita, importa il valore 1 e ignora il valore .08E + 05.
Ho provato a utilizzare cast() e convert() per convertire il valore direttamente quando viene eseguita la query, nonché impostare il tipo di dati nella tabella come stringa di caratteri e importarlo come tale. Tutti questi metodi hanno lo stesso comportamento in cui il .08E + 05 viene ignorato.
C'è un modo per avere il valore importato come 108000 anziché 1 senza .08E + 05 senza dover modificare il file csv stesso?
Impostazione del tipo di dati come un varchar e la lettura nel file CSV sembra avere lo stesso effetto con il seguente codice:
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
Non tutti i valori nel file CSV avere la notazione scientifica e la valore senza di esso, ad es 81000 si imbattono senza problemi.
In realtà nel tuo caso ora che sto rileggendo la questione probabilmente si può semplicemente usare 'selezionare Converti (INT , CONVERT (FLOAT, '1.08E + 05 ')); '- l'ultima volta che ho lavorato sulla notazione scientifica avevo a che fare con i contatori delle prestazioni di LogMan, e avevo sicuramente bisogno delle cifre decimali ... –
Qualsiasi delle soluzioni di cui sopra funziona se fornisco il valore esplicitamente. Nel file CSV ho il nome di una colonna per il valore e se lo uso, ad esempio CONVERT (INT, CONVERT (FLOAT, COLUMN_NAME_IN_CSV)) ho ancora il comportamento in cui legge solo la prima cifra. Pensieri? – amarcy
I miei pensieri devono ancora essere inseriti in una tabella di varchar per primi. Potrebbe esserci qualcos'altro in corso quando l'inserto ... selezionare dalla query openrowset sta cercando di abbinare i tipi di tabella ai metadati dalla query. Se stai inserendo in varchar per primo, non gli interesserà ... –