2015-04-23 14 views
6

Chciałbym wiedzieć, jeśli istnieje sposób, jak osiągnąć coś takiego w sql dostępu.Jak mogę wprowadzić wiele warunków w LIKE operator dla MS Access SQL

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

Próbowałem użyć tego: https://stackoverflow.com/a/1387797/1784053, ale wydaje się, że nie działa w Access.

Czy jest sposób, aby osiągnąć coś takiego jak wiele podobnych warunków w oparciu o dynamiczny zestaw warunków? Oznacza to, że nie mogę używać OR ani UNION, ponieważ mój zestaw warunków jest dynamiczny.

Podobne pytanie: How can i introduce multiple conditions in LIKE operator

+0

Jak zbudować instrukcję SQL? Skąd się biorą te warunki? – Thilo

+0

Zasadniczo mam coś takiego w tej chwili: 'Wybierz * z tabeli1 t1 tabeli łączenia wewnętrznego2 t2 na t1.column1 jak (wybierz t2.column1 gdzie t2.column2> 50)' – Kajiyama

+0

@Kajiyama znalazłeś rozwiązanie to? – Babar

Odpowiedz

-1

Spróbuj

funkcji

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 

Zapytanie

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

To kończy się na: 'Błąd składni w instrukcji CREATE TABLE. – Kajiyama

+0

najpierw utworzę funkcję, a następnie wykonam zapytanie –

+0

Mam na myśli Stwórz instrukcję funkcji (wykonałem tylko tworzenie instrukcji funkcji) rzucił ten błąd – Kajiyama

1

Można spróbować tego:

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

Jak wspomniano w pytaniu.Używam zestawu dynamicznego i dlatego nie mogę używać ani 'OR' ani' UNION'. – Kajiyama

0

Czy wystarczy użyć numeru IN?

tj

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

Można również zastąpić klauzulę IN z select z innej tabeli.

Również można użyć funkcji VBA:

select * from my_table where IsValidColumnName(column_name); 

IsValidColumnName byłaby prosta funkcja, która zwraca bool jeśli pasuje niezależnie od warunków chcesz.

Aby dodać funkcję, należy utworzyć nowy moduł, a następnie można wprowadzić coś takiego:

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 

zawiadomieniu tym podobne stwierdzenia zmieniło, LIKE w VBA korzysta z symboli wieloznacznych DOS, trzeba było te SQL Server w swoim pytaniu .

+0

Nie, to nie zadziała, ponieważ szukam podłańcucha, a nie całej wartości ciągu. Dlatego 'IN' nie zwróci tego, czego szukam, – Kajiyama

+0

, wtedy funkcja funkcji VBA wygląda jak najlepiej, ponieważ funkcja może zrobić wszystko. – cjb110

+0

możesz być bardziej konkretny i podać przykład? – Kajiyama