【问题标题】:How can i introduce multiple conditions in LIKE operator for MS Access SQL如何在 MS Access SQL 的 LIKE 运算符中引入多个条件
【发布时间】:2015-07-01 02:25:11
【问题描述】:

我想知道,如果有什么办法,如何在access sql中实现这样的东西。

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

我尝试使用这个:https://stackoverflow.com/a/1387797/1784053,但这似乎不适用于 Access。

有没有办法根据动态条件集实现类似多重条件的方法?这意味着,我既不能使用OR,也不能使用UNION,因为我的条件集是动态的。

类似问题:How can i introduce multiple conditions in LIKE operator

【问题讨论】:

  • 如何构建 SQL 语句?条件从何而来?
  • 基本上我现在有这样的东西:Select * from table1 t1 inner join table2 t2 on t1.column1 like (select t2.column1 where t2.column2 > 50)
  • @Kajiyama 你找到解决办法了吗?
  • @Babar 不幸的是,我们最终采用了完全不同的方法。

标签: sql ms-access-2010


【解决方案1】:

你可以试试这个:

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

【讨论】:

  • 如问题所述。我正在使用动态集,因此我既不能使用 OR 也不能使用 UNION
【解决方案2】:

使用IN 就够了吗?

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

您还可以将IN 子句替换为另一个表中的选择。

你也可以使用 VBA 函数:

select * from my_table where IsValidColumnName(column_name);

IsValidColumnName 将是一个简单的函数,如果它匹配您想要的任何条件,则返回一个布尔值。

要添加该功能,请创建一个新模块,然后您可以输入如下内容:

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

注意 Like 语句已更改,VBA 中的 LIKE 使用 DOS 通配符,您的问题中有 SQL Server 通配符。

【讨论】:

  • 不,这不起作用,因为我正在搜索子字符串而不是整个字符串值。因此IN 不会返回我要查找的内容
  • 那么 VBA 函数方法看起来是您最好的选择,因为该函数可以做任何事情。
  • 你能不能说的更具体一些并提供一些例子?
【解决方案3】:

试试这个

功能

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

查询

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+'%';

【讨论】:

  • 最后是:Syntax error in CREATE TABLE statement.
  • 首先创建一个函数然后执行查询
  • 我的意思是创建函数语句(我只运行了创建函数语句)抛出了这个错误
  • 它如何在 CREATE TABLE 语句中给出语法错误。因为我的函数中没有“创建表”语句
  • 可能是因为 SQL 是用于 SQL Server 而不是 Access SQL。
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2014-06-09
相关资源
最近更新 更多