Username
Password

Programmazione

Supporto per Linguaggi di Programmazione
Rispondi Invia Nuova Discussione 
Friday, 28 September 2012, 08:51
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

SQL SELECT * from Table where col1 + col2 LIKE %ciao%


Ho una tabella all'interno di un database fatta cosi:

col1->col2-> col3
EN->RI->CO
CI->A->O
BELL->O->NULL
NULL->OC->A


Applicando la seguente select:
SELECT * from Table where col1 + col2 + col3 LIKE %ciao%

Otteno come risultato la riga 2

se applico questa
SELECT * from Table where col1 + col2 + col3 LIKE %o%

Ottengo la riga 1 e 2! non ottengo la riga 3 e 4 perchè ci sono dei valori NULL

Come posso fare in modo che vengano fuori anche le righe 3 e 4?
    Rispondi Citando Rispondi
Friday, 28 September 2012, 08:54
RomeoKnight
 Militante
 
L'avatar di  RomeoKnight
 
 Messaggi: 4,968

Non ne ho certezza, ma al posto del +, prova un &
__________________
Hic erant dracones
    Rispondi Citando Rispondi
Friday, 28 September 2012, 09:05
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

no, non funzia
Tipo di dati non valido per l'operazione simmetrica
    Rispondi Citando Rispondi
Friday, 28 September 2012, 09:11
palin
 Giuseppe
 Militante
 
L'avatar di  palin
 
 Località: Albano Laziale
 Età: 44
 Messaggi: 4,246

Se sei in SQL server ci dovrebbe essere ISNULL() (vedi qui).

In ORACLE dovrebbe esserci || (doppio pipe) per concatenare come stringhe campi di tipo diverso.
__________________

Palin -- <palin AT email DOT it>

Democracy doesn't mean “my ignorance is just as good as your knowledge.” - Isaac Asimov
draco dormiens nunquam titillandus
    Rispondi Citando Rispondi
Commenti a questo messaggio
  C0m4nch3: Sono d'accordo
Friday, 28 September 2012, 09:13
RomeoKnight
 Militante
 
L'avatar di  RomeoKnight
 
 Messaggi: 4,968

Pare si usi AND al posto di &

SELECT * from Table where col1 AND col2 AND col3 LIKE %o%

Però di sql non so nada, ipotizzo
__________________
Hic erant dracones
    Rispondi Citando Rispondi
Friday, 28 September 2012, 09:23
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

Quote:
Originariamente inviato da RomeoKnight
Pare si usi AND al posto di &

SELECT * from Table where col1 AND col2 AND col3 LIKE %o%

Però di sql non so nada, ipotizzo

A logica credo che in questo modo controlli che la o sia in tutte le colonne
    Rispondi Citando Rispondi
Friday, 28 September 2012, 09:37
SatRider
 Utente Appassionato
 
L'avatar di  SatRider
 
 Messaggi: 1,382

Io, dove possibile, userei SQL ANSI standard, aiuta alla portabilità del codice e....del programmatore . In questo caso:

SELECT * from Table where COALESCE(col1,'') || COALESCE(col2,'') || COALESCE(col3,'') LIKE '%o%'

Considerazioni:

In SQL l'operatore di concatenazione standard di stringhe (ormai supportato da TUTTI i motori SQL) è || (doppio pipe).

In SQL standard (penso/mi auguro! tutti) un'espressione che contiene un valore null, restituisce SEMPRE null (anche con gli operatori matematici!!). Questa è una delle trappole caratteristiche in cui inciampano MOLTI programmatori.

La funzione COALESCE restituisce il primo (da sx a dx) valore non null tra gli argomenti passati. In sostanza, in (quasi) tutte le espressioni in cui uno dei valori può essere null, andrebbe usato COALESCE.

SatRider
    Rispondi Citando Rispondi
Commenti a questo messaggio
  Neles: Sono d'accordo
  RomeoKnight: Pippiamoci allora
Friday, 28 September 2012, 09:49
Neles
 Davide P.
 Militante
 
L'avatar di  Neles
 
 Località: Genoa
 Età: 45
 Messaggi: 3,577

Mi sa che in SQL Server la soluzione sia
Codice:
SELECT * from Table where COALESCE(col1,'') + COALESCE(col2,'') + COALESCE(col3,'') LIKE '%o%'

Stando a quanto scritto qui il || è solo con Oracle.
__________________
There is no dark side of the Moon really... matter of fact it's all dark.

Chuck Norris non bestemmia, è Dio che compie una metamorfosi per accontentarlo
    Rispondi Citando Rispondi
Friday, 28 September 2012, 09:51
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

Quote:
Originariamente inviato da Neles
Mi sa che in SQL Server la soluzione sia
Codice:
SELECT * from Table where COALESCE(col1,'') + COALESCE(col2,'') + COALESCE(col3,'') LIKE '%o%'



Mi hai battuto sul tempo

Stavo scrivendo che con || non funzionava e andava sostituito con +

RISOLTO....

Grazie a tutti!!!
    Rispondi Citando Rispondi
Commenti a questo messaggio
  Neles: Yabadabaduu!
Friday, 28 September 2012, 09:53
Neles
 Davide P.
 Militante
 
L'avatar di  Neles
 
 Località: Genoa
 Età: 45
 Messaggi: 3,577

Quote:
Originariamente inviato da gillesvilleneuve
Mi hai battuto sul tempo
Eh eh, pensa che io stavo scrivendo del COALESCE quando mi ha battuto SatRider...
__________________
There is no dark side of the Moon really... matter of fact it's all dark.

Chuck Norris non bestemmia, è Dio che compie una metamorfosi per accontentarlo
    Rispondi Citando Rispondi
Friday, 28 September 2012, 10:03
SatRider
 Utente Appassionato
 
L'avatar di  SatRider
 
 Messaggi: 1,382

ORRORE!!

L'operatore di concatenazione di stringhe è stato standardizzato dall'ANSI SQL 92, ben 10 anni fa!
Cosa aspetta M$ ad adeguarsi?


....cambiate database!!

SatRider
    Rispondi Citando Rispondi
Friday, 28 September 2012, 10:03
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

SI SI adesso fate tutti i saputelli... lo sapevano fare tutti adesso !!!!!!




Allora aumentiamo la difficoltà

se dentro una cella ci sono degli spazi e voglio toglierli? solo nel confronto intendo non voglio modificare la cella.
    Rispondi Citando Rispondi
Friday, 28 September 2012, 10:09
SatRider
 Utente Appassionato
 
L'avatar di  SatRider
 
 Messaggi: 1,382

Quote:
Originariamente inviato da gillesvilleneuve
SI SI adesso fate tutti i saputelli... lo sapevano fare tutti adesso !!!!!!




Allora aumentiamo la difficoltà

se dentro una cella ci sono degli spazi e voglio toglierli? solo nel confronto intendo non voglio modificare la cella.

SELECT * from Table where replace(COALESCE(col1,'') + COALESCE(col2,'') + COALESCE(col3,''),' ','') LIKE '%o%'

SatRider
    Rispondi Citando Rispondi
Friday, 28 September 2012, 10:13
SatRider
 Utente Appassionato
 
L'avatar di  SatRider
 
 Messaggi: 1,382

Piccolo quiz:

partendo dalla tabella descritta ad inizio thread, cosa restituisce la query:

select * from Table where col3 <> 'xyz'

Non vale provarla prima!

SatRider
    Rispondi Citando Rispondi
Friday, 28 September 2012, 10:19
gillesvilleneuve
 GillesVilleneuve
 Utente Appassionato
 
L'avatar di  gillesvilleneuve
 
 Messaggi: 1,446

Quote:
Originariamente inviato da SatRider
SELECT * from Table where replace(COALESCE(col1,'') + COALESCE(col2,'') + COALESCE(col3,''),' ','') LIKE '%o%'

SatRider


Funziona!!!!

Non se lo avete capito ma sono un po poco abile in queste cose
ero rimasto alle select base.

Grazie a tutti per l'aiuto
    Rispondi Citando Rispondi
Rispondi Invia Nuova Discussione


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 

Thread già visto da:
C0m4nch3, taunus, RomeoKnight, SanK, JoeBar, palin, SatRider, Foxes, ale82x, Neles, FelixModena, CORTOilMALTESE, maugia
Strumenti Discussione Cerca in questa Discussione
Cerca in questa Discussione:

Ricerca Avanzata
Modalità Visualizzazione

top Regole di scrittura
Tu non puoi inserire messaggi
Tu non puoi rispondere ai messaggi
Tu non puoi inviare allegati
Tu non puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Attivo

Se hai problemi, contattaci


Visite Totali Posts: 81.269.433
Tutti gli Orari sono GMT +1. Attualmente sono le 08:22.

iGroup Black
Powered by vBulletin Versione 3.5.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Traduzione italiana a cura di: Enzo-Staff-VbulletinItalia.it
 
2000, 2012 © Visiva Group