SQL查询搜索

时间:2015-07-11 23:27:41

标签: mysql sql

enter image description here

您好

我正在尝试学习SQL查询,但我想要一些帮助。我正在尝试查找一个查询,例如我可以从数据库时间搜索数据行,例如搜索值等于Z370,0631和048X的位置。

您将用于过滤此信息的查询是什么?

4 个答案:

答案 0 :(得分:2)

如果要搜索多个列,则需要使用“OR”子句并分别检查每列中的值。 'IN'关键字允许您根据提供的列表检查值:

SELECT * 
FROM   tablename 
WHERE  test1 IN ( 'Z370', 'O631', 'O48X' ) 
       OR test2 IN ( 'Z370', 'O631', 'O48X' )   

注意:你的表的真实名称应该替换tablename(不带引号)。

答案 1 :(得分:1)

使用本教程:http://www.w3schools.com/sql/sql_syntax.asp来学习sql查询的语法。

基本语法是:

SELECT columns FROM table WHERE column = 'value'

答案 2 :(得分:0)

我认为您首先需要为列定义唯一的名称。你不能有test1 3次。 此外,每行应该(必须)具有任何行的主键才有意义。

但是从DB获取内容的命令将是

SELECT [names of columns] FROM [name of table] WHERE [column name]=value

答案 3 :(得分:0)

以下是一系列步骤,可以启用您所寻求的行为。 它将描述如何执行以下操作:

1:构建一个过程,该过程分割描述的值并返回包含每个值的表。

2:构建一个过程,检查查询中是否有资格返回行。

-2.1:使用步骤1将用户值放入临时表。

-2.2:使用步骤1将行值放入临时表。

-2.3:计算2.2中的行数,其中2.1包含2.2的行值。

-2.4:如果2.3 = 2.1中的值数,则返回true。

3:从表格中选择Step2 = true的值。

这是分割字符串的过程

CREATE function [dbo].[f_split]
(
@param nvarchar(max), 
@delimiter char(1)
)
returns @t table (val nvarchar(max), seq int)
as
begin
set @param += @delimiter
;with a as
(
select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq
union all
select t + 1, charindex(@delimiter, @param, t + 1), seq + 1
from a
where charindex(@delimiter, @param, t + 1) > 0
)
insert @t
select substring(@param, f, t - f), seq from a
option (maxrecursion 0)
return
end

这里是一个函数,如果给定的行匹配少于100%,则返回false 请记住,这不是优化的,并且格式化为清楚地展示了一个概念。

CREATE FUNCTION [dbo].[Row_MeetsCriteria_FullText]
(
    @RowID Int,
    @Criteria Nvarchar(Max)
)
RETURNS Bit
AS
BEGIN
Declare @Result as Bit = 1
Declare @IntResult as int = 0
Declare @test1ColumnValue Nvarchar(4) = (Select Test1 from TestdataTable where TESTID = @RowID)
Declare @test2ColumnValue Nvarchar(4) = (Select Test2 from TestdataTable where TESTID = @RowID)
Declare @test3ColumnValue Nvarchar(4) = (Select Test3 from TestdataTable where TESTID = @RowID)
Declare @result1ColumnValue Nvarchar(4) = (Select Result1 from TestdataTable where TESTID = @RowID)
Declare @result2ColumnValue Nvarchar(4) = (Select Result2 from TestdataTable where TESTID = @RowID)
Declare @result3ColumnValue Nvarchar(4) = (Select Result3 from TestdataTable where TESTID = @RowID)
    if @Result = 1 --Continue checking
    Begin
        If LEN(@Criteria) > 0
        begin
            Declare @allStrings Nvarchar(Max)
            set @allStrings = (@test1ColumnValue + N' ' + @test2ColumnValue + N' ' +@test3ColumnValue  + N' ' +@result1ColumnValue  + N' ' +@result2ColumnValue + N' ' +@result3ColumnValue)
            declare @CriteriaTable Table (Criteria Nvarchar(MAX),seq int)
            insert into @CriteriaTable Select * from dbo.f_split(@Criteria,' ')
             declare @Matches int = (select Count(Criteria) from @CriteriaTable     Where @allStrings Like(Criteria))
             Declare @NumberOfCriteria int = (select COUNT(Criteria) from @CriteriaTable)
             Set @IntResult = ((100 / @NumberOfCriteria) * @Matches)
            if @IntResult < 100
            begin
            Set @Result = 0
            end
        end
    end
RETURN @result
END

现在只需根据函数查询您的表 客户进入这个值&#34; 1z27 2345 tthy you8&#34;

你的程序

从testdata中选择* dbo.rowmeetscriteria(RowID,&#34; 1z27 2345 tthy you8&#34;)

为了优化这一点,可以通过将行值直接传递给过程来避免双重查询。