Newsgroup: it.comp.appl.access
Titolo: Dividere record in più tabelle

Ciao a tutti,
ho un problema su come dividere una tabella contenente 250.000 record
in più tabelle in base a dei criteri.
i record del campo x sono  vari come da esempio
00000890115MO
00001906635CR
000001703792A
000001689011C
0000E16665404
0012985674123
0000345638572
00F8976067740
00335478569HB
Quindi io avrei la necessità di dividerli in tabelle separate in base
al tipo di codice
tbl1                              record che finiscono con due lettere
variabili
00000890115MO
00001906635CR
00335478569HB
tbl2                               record che finiscono con una
lettere variabile
000001703792A
000001689011C
tbl3                               record che contengono una lettera
variabile anche di posizione
0000E16665404
00F8976067740
tbl4                               record numerici
0012985674123
0000345638572
qualcuno potrebbe aiutarmi?
Grazie
BCla

bcla ha scritto:








Puoi usare la funzione Isnumeric() combinata con Mid() per testare se un
certo carattere è un numero o no. Isnumeric() applicata all'intero campo
ti dice se ci sono solo numeri o anche lettere.
Sicuro che vuoi denormalizzare la tabella? Di solito si cerca e si
consiglia sempre di fare il contrario, per avere una tabella unica...
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
Ciao,
La risposta alla tua domanda č si e ti spiego il perchč.
Ho questa tabella contenente miglia di record diversi tra loro che devo
assolutamente modificare.
ti faccio un esempio:
ho il record 00000890115MO che deve rimanere inalterato,
poi ho il record 000001703792A che devo trasformarlo in 1703792A,
poi ho il record 0000E16665404 che devo trasformarlo in E16665404,
e infine ho il record 0000345638572 che devo trasformarlo in 345638572.
l'unica soluzione che ho trovato per fare questo č quella di dividere i
tipi di record differenti in altrettante tabelle effettuare le modifiche
tramite query e alla fine ricomporre il tutto su una tabella finale.
Grazie per l'aiuto
BCla


replace(ltrim(replace(campo,"0")),"0") --->se richiesto accostamento a 
sinistra dovrebbe andare bene
right("             " & replace(ltrim(replace(campo,"0")),"0") ,13)
se richiesto accostamento a dx
non l'ho provata ma dovrebbe funzionare
that's all
-- 
ac
y-1=x


sorry
  replace(ltrim(replace(campo,"0"," ")),"0") --->se richiesto 
accostamento a
  sinistra dovrebbe andare bene
  right("             " & replace(ltrim(replace(campo,"0"," ")),"0") ,13)
  se richiesto accostamento a dx
dimenticai la sostituzione con spazio
-- 
ac
y-1=x



Scusa ma questo modo riesco a togliere gli zeri ma rimane sempre il fatto
che prima devo soddividere il tutto in piů tabelle..
Giusto?
ciao 
grazie
BCla


No non serve fa tutto su una tabella
-- 
ac
y-1=x

cut

Non riesco a capire 
come riesco a togliere da alcuni record gli zeri e da altri no
Grazie
BCla


L'hai provata?
update tabella set campo=right("             " & 
replace(ltrim(replace(campo,"0"," ")),"0") ,13)
1) X1=replace(campo,"0"," ") --->Questa toglie tutti gli "0" e 
sostituisce con spazio
2 x2=ltrim(x1)  ---------> questa toglie tutti gli spazi a sinistra
3)  x3=replace(x2," ","0") -----> questa rimette lo zero (hai ragione 
qui ho dimenticato di dire cosa doveva risostituire)
4)  x4=right(space(13) & x3,13)   -------> questa prende i 13 caratteri 
di destra
------------------> n.b.  correzione
right("             " & replace(ltrim(replace(campo,"0"," "))," ","0") ,13)
------------------> fine correzione
esempio
1) "0000A000673B0"---->"    A   673B "
2) "    A   673B "--->"A   673B "
3) "A   673B "--->"A000673B0"------> qui finisce se accostata a sx
4) "             A000673B0"--->"    A000673B0"----> questa accosta a dx
Se la "loggica" c'e' "ha da funziona'"
-- 
ac
y-1=x

 - Mostra testo tra virgolette -
Ciao e grazie allora io ho provato
 e le prime tre soluzioni vanno bene però non riesco a far funzionare
la quarta
ho provato per meglio conprendere a fare così, in modo che mi crei un
nuovo campo solo con i 13 caratteri da destra
SELECT Test.Codice, [Codice]=right(space(13) & Codice,13) AS CoD INTO
Prova
FROM Test;
ma mi da errore di sintassi
Grazie ciao
BCla

 
se e' una select dovebbe:
SELECT Test.Codice, right(space(13) & Codice,13) AS CoD INTO
Prova FROM Test;
-- 
ac
y-1=x

 Prova FROM Test;
Ciao e grazie.
Allora io ho provato tutto quello che mi ha spiegato e funziona
perfettamente, ma non riesce a realizzare quello che mi serve, o forse sono
io che non capisco.
Il tuo sistema mi toglie tutti gli zeri e qui č perfetto, perň il problema
č che 
il record 00000890115MO che deve rimanere inalterato, quindi --->
00000890115MO senza togliere niente,
mentre il record 000001703792A che devo trasformarlo in 1703792A, e il
record 0000E16665404 che devo trasformarlo in E16665404, mi riesce
benissimo come mi hai spiegato, e lo stesso per il record 0000345638572 che
devo trasformarlo in 345638572.
Quindi L'unico problema č separare dagli altri il record tipo 00000890115MO
prima di applicare le modifiche ai rimanenti tipi.
Si potrebbe utilizza la funzione IsNumeric abbinata alla funzione right in
modo di selezione tutti i record che hanno gli ultimi due caratteri
Lettere" ?
Ciao e Grazie
BCla


right("             " & replace(ltrim(replace(campo,"0"," "))," ","0") ,13)
chiamata questa K
iif(asc(mid(campo,12,1))+asc(right(campo,1))>128,campo,K)
i codici devono essere "tutti" lunghi 13 altrimenti va in errore o da un 
risultato non corretto.
s.e. & o
-- 
ac
y-1=x

 y-1=x
Scusa,
ho provato così ma non funziona
SELECT test.Codice, test.prezzo, test.Sconto, test.famiglia,
Right(Space(13) & Codice,13) AS CoD INTO prova
FROM test
WHERE iif(asc(mid(codice,12,1))+asc(right(codice,1))>128,codice,K);
grazie
BCla

 WHERE iif(asc(mid(codice,12,1))+asc(right(codice,1))>128,codice,K);
e' chiaro che non funziona. A parte il fatto che ho commesso un errore 
logico, ma avevo fose scritto che quell'affare andasse scritto sulla 
where? Ed inoltre "K" cos'e'? Non avevo scritto che dato K=blabla mi 
sembrava piu' che chiaro che "K" non esiste
SELECT test.Codice, test.prezzo, test.Sconto, test.famiglia,
iif(mid(codice,12,1)>chr(64) and 
right(codice,1)>chr(64),codice,right(space(13) & 
replace(ltrim(replace(codice,"0"," "))," ","0") ,13))
INTO prova FROM test
-- 
ac
y-1=x