2016-02-29 24 views
6

Ho due tabelle A e B. La tabella A ha colonne ID, Nome e Valore. Tra le altre colonne della tabella B, c'è una colonna chiamata IssueID. A.Value ha valori come "ForSymbol12345" e B.IssueID ha valori come "12345". Sono in grado di unire queste due tabelle su alcune colonne ID nelle rispettive tabelle. Tuttavia, desidero solo selezionare le righe in cui B.IssueID è presente nel valore A.Value. In altre parole, B.IssueID è una sottostringa di A.Value.SQL - Se la stringa in una colonna di una tabella contiene una stringa nella colonna della tabella unita

Può essere eseguito in SQL? Ho provato ad usare CONTAINS (stringa, 'valore da cercare') ma apparentemente il secondo parametro deve essere una stringa e non può essere un nome di colonna. Ho provato come

CONTAINS(A.Value, B.IssueID) 

ma dà un errore che dice il secondo parametro dovrebbe essere String, TEXT_LEX o variabile (un esempio semplificato che mostra questo qui sotto)

enter link description here

Qualcuno mi può aiutare a capire questo fuori?

+0

Per quello che vale, la parola chiave CONTAINS non supporta un parametro di ricerca dinamico. È necessario utilizzare una stringa hard-coded. Vedere la documentazione: https://msdn.microsoft.com/en-us/library/ms187787.aspx – JDB

risposta

5

Utilizzare l'operatore LIKE con un JOIN.

SELECT A.*, B.* 
FROM A 
INNER JOIN B 
ON A.Value LIKE CONCAT('%', B.IssueID, '%') 
+0

Avrei dovuto dire che sto usando SSMS 2008 e CONCAT fn è stato introdotto in SSMS 2012. Tuttavia, ho trovato una risposta qui http://stackoverflow.com/a/21702750/3482656 – DotNetNewBie

+2

La seconda modifica è corretta (ovvero la tua risposta originale era corretta) - Tuttavia, l'OP dice che le tabelle si uniscono sulle chiavi nelle rispettive tabelle e sulla corrispondenza della sottostringa, quindi il tuo 'INNER JOIN' dovrebbe probabilmente essere su questi tasti (senza nome) con il tuo' LIKE' nel join con AND o in una clausola 'WHERE'. –

+0

Hai detto "Voglio selezionare solo le righe in cui B.IssueID è presente nel valore A.Value". Quindi B.IssueID è una sottostringa di A.Value. Quindi dovrebbe essere: ON B.IssueID LIKE CONCAT ('%', A.Value, '%') –

2

opzione CONCAT di seguito indicate da evil333 avrebbe potuto funzionare, ma sto usando SSMS 2008 e CONCAT è stata introdotta in SQL Server Management Studio 2012. Quindi, ho trovato un lavoro intorno a quella qui

https://stackoverflow.com/a/21702750/3482656

È può fare qualcosa come

A.value like '%' + cast(B.IssueID as varchar) + '%' 

Spero che questo aiuti.

+0

SSMS 'Sql Server Management Studio' non è? Che cosa ha a che fare con le funzionalità di SQL Server? –

+1

@LeonardoHerrera - Microsoft rilascia una nuova versione di SSMS con ciascuna versione di SQL Server. La raffica di numeri di versione può essere abbastanza confusa per i neofiti, ma è sicuro dire che se l'OP utilizza SSMS 2008, la versione più recente di SQL Server con cui potrebbero lavorare è SQL Server 2008. – JDB

Problemi correlati