Powershell: waardes uit ODBC van NL formaat naar Engels

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Als ik met ODBC een verbinding maak naar een Unit 4 Multiverse database krijg ik datums terug in NL-formaat, d.w.z.: d/m/yyyy.
Ook decimals krijg ik terug met een komma als separator, maar dat moet een punt worden.

Ik moet ze dus in het engelse formaat terugkrijgen, anders kan ik de data uit de CSV niet importeren in een MS SQL tabel (krijg dan foutmelding dat waarde niet correct te CAST'en is).

Dus datum notatie moet: YYYY-MM-DD worden en decimal notatie moet bijv.: 1,000.00 zijn (mind the comma and period ;) )

Is er een mogelijkheid om dat eenvoudig met Powershell voor elkaar te krijgen, zonder dat ik overal REPLACE-statements moet gaan toevoegen aan de SQL query?

code:
1
2
3
4
5
6
7
8
9
$query = 'SELECT "BOEKINGSDATUM","CREDIT" FROM GROOTBOEKMUTATIES'
$conn = New-Object System.Data.Odbc.OdbcConnection
$conn.ConnectionString = "DSN=unit4;Pwd=xxxx;"
$conn.open()
$cmd = New-object System.Data.Odbc.OdbcCommand($query,$conn)
$ds = New-Object system.Data.DataSet
(New-Object system.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
$conn.close()
$ds.Tables[0] | Export-Csv -NoTypeInformation -Encoding "ASCII" -Path "C:\export\GROOTBOEKMUTATIES.csv"

[ Voor 4% gewijzigd door DPLuS op 31-07-2017 14:21 ]

Beste antwoord (via DPLuS op 31-07-2017 18:57)


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08-10 12:16

Haan

dotnetter

Ik heb er zelf geen ervaring mee, maar in de documentatie zie ik een -UseCulture switch. Culture is de .NET (en dus ook Powershell) benaming voor de .. culture settings ;) -> en-US, nl-NL zijn cultures.
Dus misschien werkt dit:
PowerShell:
1
2
Set-Culture en-US
$ds.Tables[0] | Export-Csv -UseCulture -NoTypeInformation -Encoding "ASCII" -Path "C:\export\GROOTBOEKMUTATIES.csv"

Kater? Eerst water, de rest komt later

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 08-10 12:16

Haan

dotnetter

Ik heb er zelf geen ervaring mee, maar in de documentatie zie ik een -UseCulture switch. Culture is de .NET (en dus ook Powershell) benaming voor de .. culture settings ;) -> en-US, nl-NL zijn cultures.
Dus misschien werkt dit:
PowerShell:
1
2
Set-Culture en-US
$ds.Tables[0] | Export-Csv -UseCulture -NoTypeInformation -Encoding "ASCII" -Path "C:\export\GROOTBOEKMUTATIES.csv"

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
OK, aangezien het Windows server 2008 R2 is kan ik alleen dit gebruiken heb ik gezien:
code:
1
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-GB'


Dat lost in ieder geval het probleem met die decimal separator op, maar de datum staat er nog steeds in NL formaat:

code:
1
19/05/2010 00:00:00


Dus dat is eigenlijk het enige wat ik nog op moet zien te lossen.

Acties:
  • 0 Henk 'm!

  • DPLuS
  • Registratie: April 2000
  • Niet online
Heb het inmiddels al zelf opgelost.
Het onderliggende RDBMS is Gupta SQLbase, en daar kan ik bijvoorbeeld de DATETOCHAR functie gebruiken om de datum in het juiste formaat terug te geven:
code:
1
$query = "SELECT @DATETOCHAR(BOEKINGSDATUM, 'yyyy-mm-dd'),TOELICHTING FROM GROOTBOEKMUTATIES"

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Die datums die je terug kreeg waren sowieso niet Nederlands. Nederlands datumformaat is dd-mm-yyyy (dus met hyphens en niet met slashes). Het Britse datumformaat is dd/mm/yyyy (met slashes). En dat klopt want je had 'en-GB' gekozen.

Wikipedia: Date format by country