2015-04-23 10 views
6

Vorrei sapere, se c'è un modo, come ottenere qualcosa di simile in access sql.Come posso introdurre più condizioni nell'operatore LIKE per MS Access SQL

select * from my_table where column_name like ('ABC%', 'MOP%'); 

Ho provato l'uso questo: https://stackoverflow.com/a/1387797/1784053, ma questo sembra non funzionare in Access.

C'è un modo per ottenere qualcosa come condizionamento multiplo come basato su un insieme dinamico di condizioni? Ciò significa che non posso usare ORUNION perché il mio set di condizioni è dinamico.

domanda simile: How can i introduce multiple conditions in LIKE operator

+0

Come si crea l'istruzione SQL? Da dove vengono le condizioni? – Thilo

+0

Fondamentalmente ho qualcosa del genere al momento: 'Seleziona * da tabella1 t1 inner join table2 t2 su t1.column1 like (seleziona t2.column1 dove t2.column2> 50)' – Kajiyama

+0

@Kajiyama hai trovato la soluzione per Questo? – Babar

risposta

-1

Prova questa

Funzione

CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20)) 
RETURNS @Strings TABLE 
( 
    position int IDENTITY PRIMARY KEY, 
    value varchar(8000) 
) 
AS 
BEGIN 

DECLARE @index int 
SET @index = -1 

WHILE (LEN(@text) > 0) 
    BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
    IF (@index = 0) AND (LEN(@text) > 0) 
     BEGIN 
     INSERT INTO @Strings VALUES (@text) 
      BREAK 
     END 
    IF (@index > 1) 
     BEGIN 
     INSERT INTO @Strings VALUES (LEFT(@text, @index - 1)) 
     SET @text = RIGHT(@text, (LEN(@text) - @index)) 
     END 
    ELSE 
     SET @text = RIGHT(@text, (LEN(@text) - @index)) 
    END 
    RETURN 
END 

Query

select * from my_table inner join (select value from fn_split('ABC,MOP',',')) 
as split_table on my_table.column_name like '%'+split_table.value+'%'; 
+0

Questo equivale a: 'Errore di sintassi nell'istruzione CREATE TABLE. – Kajiyama

+0

prima creare una funzione e poi eseguire la query –

+0

Voglio dire Crea istruzione di funzione (ho eseguito solo creare l'istruzione di funzione) ha gettato questo errore – Kajiyama

1

Si può provare questo:

select * 
from my_table 
where column_name like ('ABC%') or column_name like ('MOP%'); 
+0

Come menzionato in questione.Sto usando il set dinamico e quindi non posso usare né 'OR' né' UNION'. – Kajiyama

0

Utilizzare IN sarebbe sufficiente?

cioè

select * from my_table where column_name in ("ABC", "MOP"); 

Si può anche sostituire la clausola IN con una selezione da un altro tavolo.

Inoltre è possibile utilizzare una funzione VBA:

select * from my_table where IsValidColumnName(column_name); 

L'IsValidColumnName sarebbe una semplice funzione che restituisce un bool se corrisponde a qualsiasi condizione che si desidera.

Per aggiungere la funzione, creare un nuovo modulo e quindi è possibile inserire qualcosa di simile:

Public Function IsValidColumnName(columnName As String) As Boolean 

If columnName Like "ABC*" Or columnName Like "MOP*" Then 
    IsValidColumnName = True 
Else 
    IsValidColumnName = False 
End If 

End Function 

Avviso le dichiarazioni come cambiati, LIKE in VBA utilizza i caratteri jolly DOS, si doveva quelle di SQL Server nella tua domanda .

+0

No, questo non funzionerà perché sto cercando la sottostringa non il valore di stringa intero. Perciò 'IN' non restituirà quello che sto cercando per – Kajiyama

+0

quindi l'approccio della funzione VBA sembra la soluzione migliore, poiché la funzione potrebbe fare qualsiasi cosa. – cjb110

+0

puoi essere più specifico e fornire qualche esempio per favore? – Kajiyama