Toon posts:

[AS400/MSSQL] Overbodige spaties wegwerken bij import MSSQL*

Pagina: 1
Acties:
  • 310 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik ben bezig een import te doen vanuit een as400 database.
hier moet een aantal tabellen in een sql database gezet worden.
De huidig werkende syntax staat hieronder:


SQL:
1
select "ADNUMM","ADNAAM","ADNAAM1","ADADRE","ADPOST","ADMAIL","ADWWWA","ADWOON","ADTELE","ADFAXN","ADGROE","ADVERZ","ADREKA","ADHREK","ADHFDD","ADVNIV","ADVNCR","ADDLOR","ADDLRG","ADDLPI","ADREMB","ADKOPI","ADBTWP","ADDMAG","ADAANM","ADVERT","ADKOST","ADPKON","ADAFLE","ADVKON","ADAFLV","ADKPRO","ADPRYS","ADPADR","ADPPOS","ADPWOO","ADGRBN","ADDGRB","ADTAAL","ADKDBT","ADDKRE","ADLKRE","ADDCYK","ADCENT","ADBEGD","ADDEBN","ADOPAD","ADOPFK","ADAUTI","ADVALV","ADSELK","VERKBHDJ01","MARGE","VERMEUDJ01","MARGE01","VERMACDJ01","MARGE02","VERICTDJ01","MARGE03","VERTDDJ01","MARGE04","VERTOTDJ01","MARGE05","VERKBHVJ01","MARGE06","VERMEUVJ01","MARGE0101","VERMACVJ01","MARGE0201","VERICTVJ01","MARGE0301","VERTDVJ01","MARGE0401","VERTOTVJ01","MARGE0501","VKDATO04","DATUM03" from "S654D44B"."OMZETTEN"."STAMBEST"


maar... en nu komt het.
er staan tientalle spaties achter iedere uitkomst in de nieuw gemaakte sql database.
nu bestaat er bijvoorbeeld een trim commando, ik heb zelf al wat syntaxes geprobeerd, maar ik heb echter geen idee hoe deze precies werkt...
dus wie o wie helpt me uit de brand?

[ Voor 36% gewijzigd door Verwijderd op 14-10-2005 11:50 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-04 12:54

Jaspertje

Max & Milo.. lief

Wat is het type van die velden (Varchar?)

en onder SQL databaase bedoel je een MSSQL of een MySQL

offtopic:
Als je "code" gebruikt hoeft daar geen apparte tabel meer omheen :)

[ Voor 75% gewijzigd door Jaspertje op 14-10-2005 09:00 ]


Verwijderd

Topicstarter
alles is
decimal of char

offtopic, I know, zat wat te kutten 8)7

[ Voor 43% gewijzigd door Verwijderd op 14-10-2005 09:00 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-04 12:54

Jaspertje

Max & Milo.. lief

En dan heb je zeker char 10 en een veld met lengte 3 en 7 spaties (zoek de overeenkomst)

[ Voor 3% gewijzigd door Jaspertje op 14-10-2005 09:01 ]


Verwijderd

Topicstarter
hm ik neem een voorbeeldje.
het veld adadre is een adres veld.

Binnen de AS400 (waar de data vandaan komt) is het dus gewoon tekst.
Deze importeer ik als char met een lenght van 30 binnen MSSQL.

Echter, bekijk ik nu de applicatie die de geimporteerde SQL database gebruikt, zie ik hetvolgende:

Adres: Voorbeeldstraat 46 <spaties>

Kortom, hij maakt het veld écht 30 karakters breed...
Maar... niet ieder adres is natuurlijk evenlang, want iedere klant heeft weer een ander adres (logisch ;))

Dus wat ik wil is de tekst max. 30 breed maken, maar croppen (of trimmen whatever) als hij korter is.
En dit speelt niet alleen voor het Adres veld, maar voor álle niet nummerieke velden. :/

Op zich niet heel schokkend, ware het niet dat we het programma dat deze data gebruikt gaan koppelen aan MS Word.
En een brief automatisch op stellen met 'geachte <contactpersoon> *-tig spaties*, '
is niet erg netjes ;)

Dus... wát kan ik hier doen?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
De handleiding lezen.
char and varchar
Fixed-length (char) or variable-length (varchar) character data types.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 08-04 12:54

Jaspertje

Max & Milo.. lief

Om het iets specifieker te maken, kijk eens naar VarChar, NVarchar (en voor hele grote teksten NText) De verschillen kan je idd zelf ff opzoeken :)

Verwijderd

Topicstarter
Thnx voor de snelle reply's.
Dit klinkt inderdaad als een stap in de goede richting ;)
Ik laat nog wel even weten wat de uitkomst is!

  • NoReason
  • Registratie: Mei 2003
  • Laatst online: 27-04 11:06
Verwijderd schreef op vrijdag 14 oktober 2005 @ 09:09:
Deze importeer ik als char met een lenght van 30 binnen MSSQL.
helpt het nie als je die importeert als een varchar?
te laat dus :X

[ Voor 4% gewijzigd door NoReason op 14-10-2005 09:15 ]

It's time to kick ass and chew bubble-gum, and I'm all out of gum.


  • c00kie
  • Registratie: Juni 2005
  • Laatst online: 03-04 09:46
dit kan ook te maken met de instellingen van de tabellen in uw db...
Ik heb dit probleem ooit ook eens gehad, en toen heeft de databaseadmin iets verandert aan de tabellen en toen was het probleem opgelost.

Build a bridge, get over it... Specs : yes !!! website over bouwen & verbouwen


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Dit is inderdaad gewoon een kwestie van de handleiding lezen, daar staat het prima in uitgelegd. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

En in overleg met de topicstarter weer open, omdat het probleem blijkbaar toch iets dieper zit dan CHAR/VARCHAR. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:03
Hoe diep zit het dan ?
Ik bedoel maar: een varchar laat alle 'trailing' whitespaces weg.

Zijn die velden nu varchar ?
Wat als je deze update uitvoert nadat je het veld naar varchar hebt omgezet:
code:
1
update tabel set veld = ltrim(rtrim(veld))

https://fgheysels.github.io/


Verwijderd

Topicstarter
Heb ondertussen alle opties gehad binnen de MSSQL design table (char, nchar, ntext, enz)
Niets van deze dingen bood de oplossing oplossing.

Vervolgens de trim functie binnen MSSQL geprobeerd, ook zonder resultaat.

Vond net nog dit via google:
Key Component STRING => CSTRING

In most SQL databases trailing spaces are important when testing if a field is equal. So 'Smith' ~= 'Smith '. This is normally only important on key components as they are used in relational links and filters. If you use CSTRINGs instead of STRINGs, then Clarion treats trailing spaces in the same manner as the SQL system.
(weet iedereen weer wat er al geprobeerd is ondertussen ;))

Verwijderd

Topicstarter
en dan mijn volgende vraag... hoe deze cstring toe te passen :?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 26-04 19:33
Verwijderd schreef op vrijdag 14 oktober 2005 @ 11:32:
Heb ondertussen alle opties gehad binnen de MSSQL design table (char, nchar, ntext, enz)
Niets van deze dingen bood de oplossing oplossing.
Houd je er rekening mee dat reeds geimporteerde data de spaties blijven houden nadat je het kolomtype veranderd hebt?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
ik gooi tussen iedere verandering de database leeg en voer dan pas weer de DTS import package uit.
ja dus ;)

  • crazyx
  • Registratie: Juli 2001
  • Laatst online: 04-04 14:31
Ik heb hier hetzelfde na het importeren van as400 data. Om eerlijk te zijn was het me nog niet opgevallen, ik zet meestal alles pas juist bij het weergeven. Misschien dat dat een idee is?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op vrijdag 14 oktober 2005 @ 11:32:
Heb ondertussen alle opties gehad binnen de MSSQL design table (char, nchar, ntext, enz)
Niets van deze dingen bood de oplossing oplossing.
Je moet natuurlijk gewoon het datatype gebruiken dat het best past bij je data. NTEXT etc is helemaal niet nodig. In dit geval moet je gewoon een varchar gebruiken
Vervolgens de trim functie binnen MSSQL geprobeerd, ook zonder resultaat.
Hoe bedoel je zonder resultaat? Heb je gedaan wat whoami heeft gepost? Dat werkt gewoon hoor :?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:01

TeeDee

CQB 241

Verwijderd schreef op vrijdag 14 oktober 2005 @ 11:32:
Heb ondertussen alle opties gehad binnen de MSSQL design table (char, nchar, ntext, enz)
Niets van deze dingen bood de oplossing oplossing.
Je hebt toch wel een (N)VarChar gedeclareerd he?

Hier het e.e.a. even geprobeerd en een ltrim(rtrim(veld)) werkt gewoon.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
crazyx schreef op vrijdag 14 oktober 2005 @ 13:14:
Ik heb hier hetzelfde na het importeren van as400 data. Om eerlijk te zijn was het me nog niet opgevallen, ik zet meestal alles pas juist bij het weergeven. Misschien dat dat een idee is?
Ben bang dat dit inderdaad een soort as400 kwaal is.
Geen enkele optie resulteert in het verwijderen van de loze spaties achter de gevulde velden.
Wat bedoel je precies met 'alles juist zetten bij weergeven?'
P_de_B schreef op vrijdag 14 oktober 2005 @ 13:19:
[...]
Hoe bedoel je zonder resultaat? Heb je gedaan wat whoami heeft gepost? Dat werkt gewoon hoor :?
Mja, hier dus niet.
Lijkt erop dat de AS400 e.e.a. heel vaag aanlevert?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SET TEXTSIZE 0
SET NOCOUNT ON

DECLARE @position int, @string char(15)

SET @position = 1
SELECT @string = TOP 1 [veldnaam_dat_gek_doet] FROM [tabelnaam] ORDER by [iets]
WHILE @position <= DATALENGTH(@string)
   BEGIN
   SELECT ASCII(SUBSTRING(@string, @position, 1)),
      CHAR(ASCII(SUBSTRING(@string, @position, 1)))
    SET @position = @position + 1
   END
SET NOCOUNT OFF
GO


Post de output en de waarde van het eerste veldje in de tabel eens

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Je code een klein beetje aangepast, want hij sloeg heftig op hol
Is dit wat je wilde zien?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
SET TEXTSIZE 0 
SET NOCOUNT ON 

DECLARE @position int, @string char(15) 

SET @position = 1 
SELECT @string = [ADNAAM] FROM [STAMBEST]
WHILE @position <= DATALENGTH(@string) 
   BEGIN 
   SELECT ASCII(SUBSTRING(@string, @position, 1)), 
      CHAR(ASCII(SUBSTRING(@string, @position, 1))) 
    SET @position = @position + 1 
   END 
SET NOCOUNT OFF 
GO





                 
----------- ---- 
75          K

                 
----------- ---- 
121         y

                 
----------- ---- 
111         o

                 
----------- ---- 
99          c

                 
----------- ---- 
101         e

                 
----------- ---- 
114         r

                 
----------- ---- 
97          a

                 
----------- ---- 
32           

                 
----------- ---- 
77          M

                 
----------- ---- 
105         i

                 
----------- ---- 
116         t

                 
----------- ---- 
97          a

                 
----------- ---- 
32           

                 
----------- ---- 
78          N

                 
----------- ---- 
101         e

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ok, er zitten dus geen rare karakters achter die op spaties lijken.Ik snap er niets van. Ik begrijp niet dat RTRIM() niet werkt.

Als je

SELECT RTRIM(ADNAAM) FROM StamBest doet, dan zitten er nog spaties achter?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 27-04 08:59

Freee!!

Trotse papa van Toon en Len!

De handigste methode is om vanaf de AS/400 te downloaden naar een .csv en die binnen te halen in MSSQL. Dat kan allemaal geautomatiseerd met een scriptje op de PC. Een alternatief is via Excel.

EDIT:
TRIM(<veldnaam>) zou overigens uitstekend moeten werken voor alfanumerieke velden.

[ Voor 20% gewijzigd door Freee!! op 14-10-2005 17:20 . Reden: TRIM ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
P_de_B schreef op vrijdag 14 oktober 2005 @ 17:02:
Ok, er zitten dus geen rare karakters achter die op spaties lijken.Ik snap er niets van. Ik begrijp niet dat RTRIM() niet werkt.

Als je

SELECT RTRIM(ADNAAM) FROM StamBest doet, dan zitten er nog spaties achter?
select RTRIM (ADNAAM) from STAMBEST

Gaat prima! :*)

select RTRIM (ADNAAM), RTRIM (ADWWWA) from STAMBEST

en het feest begint weer van voren af aan :? 8)7

Best vervelend want er zijn een 50 tal velden te importeren uit de as400 tabel, en die gaan allemaal de mist in met de regelbreedte.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ok, en als je alleen RTRIM(ADWWWA) doet?

Dit is heel vreemd. Als je wilt mag je me een backup van de tabel sturen met 1 of 2 regels erin. Dan wil ik wel even kijken.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
ja dat is het mooiste, ook dat werkt gewoon goed. 8)7

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op maandag 17 oktober 2005 @ 09:43:
ja dat is het mooiste, ook dat werkt gewoon goed. 8)7
Ik denk echt dat jij iets verkeerd doet, en ik ben bang dat we er zo ook niet achter komen. Dus, als je wilt, moet je even een backup mailen van de betreffende tabel met 2 records erin.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 27-04 08:59

Freee!!

Trotse papa van Toon en Len!

Probeer het eens met:
code:
1
select RTRIM (ADNAAM) as ADNAAM, RTRIM (ADWWWA) as ADWWA from STAMBEST

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
Iedereen dank voor de hulp, door e.e.a. van de tips te combineren is het uiteindelijk gelukt!
thnx!! 8)

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 27-04 08:59

Freee!!

Trotse papa van Toon en Len!

Hoe heb je het nu uiteindelijk gedaan? Ik ben er vrij zeker van dat ik niet de enige ben die dat graag wil weten.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op dinsdag 18 oktober 2005 @ 13:55:
Iedereen dank voor de hulp, door e.e.a. van de tips te combineren is het uiteindelijk gelukt!
thnx!! 8)
Het datatype was nog steeds CHAR(n), ook werkt RTRIM gewoon in de testdatabase...

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1