MSSQL BULK INSERT 10,5 als 10.5 einlesen möglich (deutsches Formatierung in englische Formatierung umwandeln)?
Guten Abend,
Umgebung:
MS 2012 SRV
MSSQL 2016
Ich möchte CSV Dateien mit Preisen im Format xxx,xx per BULK INSERT einlesen.
Der MSSQL Server akzeptiert nur Zahlen im Format xxx.xx weshalb ich jetzt nach einer Lösung suche.
Meine Herangehensweise wäre jetzt:
Preise als VARCHAR einlesen und vor Import in Zieltabelle in das korrekte Format "umbauen".
Allerdings frage ich mich, ob das nicht effizenter geht und suche Denkanstöße oder zielführende Hinweise.
LÖSUNG:
Preise in ein Variable VARCHAR(12) einlesen und mit
in das englische Zahlenformat umwandeln.
Das Datum mit
in das gewünschte Format bringen.
(Tag und Monat mussten bei mir getauscht werden.)
Grüße vom it-frosch
Umgebung:
MS 2012 SRV
MSSQL 2016
Ich möchte CSV Dateien mit Preisen im Format xxx,xx per BULK INSERT einlesen.
Der MSSQL Server akzeptiert nur Zahlen im Format xxx.xx weshalb ich jetzt nach einer Lösung suche.
Meine Herangehensweise wäre jetzt:
Preise als VARCHAR einlesen und vor Import in Zieltabelle in das korrekte Format "umbauen".
Allerdings frage ich mich, ob das nicht effizenter geht und suche Denkanstöße oder zielführende Hinweise.
LÖSUNG:
Preise in ein Variable VARCHAR(12) einlesen und mit
SET @PREIS = REPLACE(CONVERT(varchar(12),@PREIS , 0), ',', '.');
Das Datum mit
datefromparts(YEAR(@DAT), DAY(@DAT),MONTH(@DAT));
in das gewünschte Format bringen.
(Tag und Monat mussten bei mir getauscht werden.)
Grüße vom it-frosch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 538510
Url: https://administrator.de/contentid/538510
Ausgedruckt am: 21.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
ist das eine einmalige Aktion oder eine wiederkehrende?
Wenn einmalig:
Wenn wiederkehrend:
Dritte Variante:
Dem Datenerzeuger auf die Finger kloppen
Gruß
em-pie
ist das eine einmalige Aktion oder eine wiederkehrende?
Wenn einmalig:
- CSV in Excel öffnen
- Spalte anpassen
- als csv abspeichern
Wenn wiederkehrend:
- Mit Powershell/ Batch den Decimaltrenner austauschen
- Danach die csv importieren
- CSV in eine zwischentabelle importieren
- Daten in Zieltabelle mit insert into kopieren und dabei ein REPLACE(COLUMN, ',', '.') einbinden.
Dritte Variante:
Dem Datenerzeuger auf die Finger kloppen
Gruß
em-pie
Zitat von @it-frosch:
Hallo wiesi200,
bei uns werden alle Server in Englisch installiert. Somit ist das schon ok.
Genau eben nicht.Hallo wiesi200,
bei uns werden alle Server in Englisch installiert. Somit ist das schon ok.
Stell doch mal beim Server in den Regionseinstellungen beim Dezimaltrennzeichen vom Punkt auf Komma um.
Hallo Frosch,
wenn die Daten sowieso in einer Excel-Datei vorliegen, könnte man unter Optionen (in Excel 2016 ist das im im Abschnitt "Erweitert") das Dezimaltrennzeichen auf den Punkt, statt dem Komma stellen, dann wird in der CSV-Datei gleich das richtige Zahlenformat gespeichert.
Ansonsten gibt es nur noch die Möglichkeiten, die schon em-pie aufgezählt hat. Mit BULK INSERT kannst Du das nicht direkt umstellen, soweit ich weiß, auch nicht mit einer Formatdatei.
Gruß, Mad Max
wenn die Daten sowieso in einer Excel-Datei vorliegen, könnte man unter Optionen (in Excel 2016 ist das im im Abschnitt "Erweitert") das Dezimaltrennzeichen auf den Punkt, statt dem Komma stellen, dann wird in der CSV-Datei gleich das richtige Zahlenformat gespeichert.
Ansonsten gibt es nur noch die Möglichkeiten, die schon em-pie aufgezählt hat. Mit BULK INSERT kannst Du das nicht direkt umstellen, soweit ich weiß, auch nicht mit einer Formatdatei.
Gruß, Mad Max