|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
Concatenate in sqlserver2000
Saluti a tutti
sapete come si realizza la concatenate in sqlserver2000?? mi spiego: io ho sempre lavorato con Oracle e spesso ho dovuto usare la funzione || per dei confronti particolari il formato è select * from tabella where campo1||campo2 = 'XXXXXXXXXXX' dove le x sono una stringa lunga come la somma delle lunghezze di campo1 e campo2 in sql server ho provato con: select * from tabella where campo1 + campo2 = 'XXXXXXXXXXX' ma funziona solo fino a quando la stringa contiene un certo valore tipo '00012345678' oltre quel valore mi risponde: Server: Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting numeric to data type numeric. che cavolo vuol dire?? grazie in anticipo ![]()
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
forse è un problema di precisione più grande di campo1 + campo2 rispetto a 'XXXX...' ... boh... questi concetti di conversione, precisione, casting sono un pò ostici
![]()
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
La concatenazione è corretta con l'operatore '+'
Si verifica un errore di conversione ... la maggior parte delle volte è perchè SQL Server opera una conversione automatica del datatype per eseguire il confronto che non è supportata. Per ovviare a questo problema devi utilizzare l'apposita funzione CAST che opera la conversione della tipologia del dato. Ad esempio se hai una tabella 'tblA' con un campo 'CampoA' di tipo SmallInt Se provi ad eseguire questa Query: SELECT * FROM tblA WHERE tblA.QT + tblA.QT = '1' Si verifica questo errore: [Arithmetic overflow error converting expression to data type Smallint.] Devi cambiare la tua SQL in questo modo: SELECT * FROM tblA WHERE CAST(tblA.QT as float) + CAST(tblA.QT as float) ='1' ... ovviamente devi cambiare il datatype in base alle tue esigenze. Guarda l'Help sulla funzione CAST per vedere le conversioni supportate! Ciao ![]()
__________________
E' quasi tutto relativo! |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
ma allora ci avevo preso!!
![]() ![]()
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km" ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
ho provato con as numeric
e non mi da + errore però il risultato non va bene... non mi da nessun record e poi i campi sono già numeric da 6 e 4 il primo contiene 41013 e l'altro una sequenza da 1 a 100 se io gli metto cast(campo1 AS NUMERIC) + CAST(campo2 AS NUMERIC) > '0410130020' non ottengo niente.... qualche idea in proposito?? saluti e grazie ![]()
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2002
Città: NAPOLI!
Messaggi: 1310
|
forse sparo una corbelleria...
se usi l'operatore + con due numeri, siamo sicuri che otterrai una stringa composta dai due numeri affiancati e non la loro somma? forse dovresti fare il casting degli argomenti da numeri a stringhe... e cioé SELECT * FROM tabella1 WHERE CAST(campo1 as text) + CAST(campo2 as text) ='XXXXXXXXXXX' |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jun 2002
Città: NAPOLI!
Messaggi: 1310
|
ho provato a fare una query in access e il modo esatto è questo:
SELECT * FROM tabella1 WHERE cstr(a)+cstr(b)='xxxxxx'; convertendo a e b (campi di tipo numerico) in stringhe. spero di essere stato d'aiuto. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
ora sono a casa in malattia
proverò lunedì ma mi sembra corretto saluti
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Aug 2001
Città: Gerenzano
Messaggi: 129
|
Confermo che funziona!
Perciò la tua SQl sarà: SELECT * FROM TabellaA WHERE CAST(A as nvarchar)+CAST(B as nvarchar)='XXXXXX' Ciao!
__________________
E' quasi tutto relativo! |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
non va...
i campi uniti perdono gli 0 davanti e quindi se il primo è 0 e il secondo 4 mi diventano 04 e non 0000000004..... con as text mi dice che nun se pò fa con char e nvarchar perdo gli zeri e il confronto mi da risultati sballati...
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#11 |
Registered User
Iscritto dal: Dec 2001
Messaggi: 890
|
prova questo:
Codice PHP:
Ultima modifica di dr.stein : 30-07-2003 alle 15:03. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
la select:
select * from tb_rivendite where FORMAT(cast(trvn_precodice_istat as nvarchar) + cast(trvn_cd_rivendita as nvarchar);"0000000000") > '0000000004' la risposta Server: Msg 170, Level 15, State 1, Line 3 Line 3: Incorrect syntax near ';'. .....
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
ma che sql è?? mysql??
la format non c'è tra le funzioni di sqlserver2000 ![]() ![]() ![]()
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#14 |
Registered User
Iscritto dal: Dec 2001
Messaggi: 890
|
Access!!!
per questo pensavo che in SQL2000 andasse bene!! ![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
prodotti MS compatibili tra loro???
![]() ![]() ![]() ![]() intanto mi sto scaricando il book online della MS x sqlserver i soliti 36mb.... compressi in .cab ![]()
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jun 2000
Città: Ostia beach [Roma]
Messaggi: 1292
|
risolto... ovviamente senza l'aiuto del book...
![]() i pratica se uso la cast as varchar mi tira fuori delle stringhe prive degli zeri a sx degli importi quindi mi costruisco la stringa di confronto eliminando gli zeri a sx ![]() ![]() ![]() ovvero se avevo 041013 e 0020 al confronto gli passo 04101320 che è la stessa stringa che mi restituisce se la cast la uso nella select e non nella where spero di essere stato chiaro ![]() ps ovviamente accedo a sqlserver2000 con il cobol ![]() ![]() ![]()
__________________
Sometimes it snows in April Sometimes I feel so bad, so bad Sometimes I wish life was never ending And all good things, they say, never last |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:07.