Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    [sql2008] charindex su varchar(max)

    ho una tabella in cui devo fare una ricerca testuale di un dato in un campo di tipo varchar(max).
    Il campo contiene una stringa fatta così:
    2345|123|234|1234|12345|23456|
    (occhio: la stringa NON inizia con pipeline...)

    Come faccio a mettere in where la selezione dei record della tabella dove il campo contiene un numero, ad esempio il numero 234?
    Mi serve beccare esattamente 234 e non 2345 o 1234

    Io avevo provato a fare una cosa tipo così
    SELECT * FROM tabella WHERE CHARINDEX('|234|', '|' & campo) >0
    aggiungendo la pipeline al campo, ma SQL dice giustamente picche alla mia "sintassi creativa".

    Qualcuno sa come posso fare?
    grazzzzz
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    SELECT ...
    FROM ...
    WHERE campo like '%|234|%'

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    si però così se il numero da cercare fosse 2345 non lo troverei
    (la query è in una pagina asp.net e il numero da cercare varia dinamicamente)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    ma, se non ho capito male, il numero da ricercare è sempre contenuto all'interno delle due | giusto?

    Se così fosse e costruisci la query in asp, avrai una cosa del genere

    codice:
    string query = "SELECT ... FROM ... WHERE campo LIKE '%| " + variabile_numero_da_cercare + "|%'";

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    si sempre tranne quando è il primo della stringa :-(

    (continuiamo a ragionare col numero spianato, voglio capire come fare la query... all'asp ci penso dopo)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    SELECT * FROM tabella WHERE
    campo like '%|234|%'
    OR
    ( campo like '%234|%' AND charindex('234|', campo)=1 )


    così potrebbe andare?
    (ci metterà un secolo)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    ti conviene crearti una vista in cui crei il campo con la | davanti e poi intteroghi la vista come ti ho detto ( like '%|234|%')

  8. #8
    select colonne from tabella where '|'+colonna LIKE '%|' + @valore +'|%'

    that easy!


  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    it works.... qual'è la più veloce in esecuzione, quest'ultima sulla tabella diretta o quella sulla vista?
    A pelle direi quella sulla vista (per il fatto che non deve giuntare la pipeline col campo) .... ma sarà poi una differenza sensibile (ho un paio di milioni di record da sfrucugliare)?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    le due cose sono equivalenti. pensa invece di aggiornare in maniera definitiva la colonna aggiungendo il pipe all'inizio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.