SQL搜索在两列中,具有一个组合值

时间:2018-01-25 06:08:15

标签: sql sql-server

我将尝试展示我想要实现的目标。对我来说,这是一个过于简单的例子。

假设我有一个包含两列的表

ID        YEAR
---       ----
1         2017
2         2018

我有一个搜索字词2017 / 1

我想做的是这样的事情

select * from table where 'YEAR / ID' LIKE '%searchterm%'

这可能吗?

提前致谢。

5 个答案:

答案 0 :(得分:2)

在我看来,最有效的方法是:

  1. 首先将String x =“2017/1”划分为两个int值int year = 2017,int id = 1.我不知道您使用的是哪种编程语言,但所有编程语言都有特殊功能很容易(在所有值之间'/')。

  2. 然后使用此查询:

    Select * 
    from table 
    where year = 2017 
      and id = 1
    

答案 1 :(得分:1)

使用以下查询,我认为您的搜索文本格式为2017 / 1

DECLARE @tblTest AS Table
(
    Id INT,
    YearNo INT
)

INSERT INTO @tblTest values (1,2017)
INSERT INTO @tblTest values (2,2018)
INSERT INTO @tblTest values (3,2017)
INSERT INTO @tblTest values (4,2018)

DECLARE @searchterm VARCHAR(50)='2017 / 1'

LEFT 会为您提供从左侧位置到应用长度的字符串。

RIGHT 会为您提供从正确位置到应用长度的字符串

SELECT 
    * 
FROM @tblTest 
WHERE YearNo=LEFT(@searchterm,4)
AND Id = REPLACE(RIGHT(@searchterm,LEN(@searchterm)-(CHARINDEX('/',(REPLACE(@searchterm, ' ', ''))))),'/','')

答案 2 :(得分:1)

如果您的数据库兼容性可能为130 ,那么您可以尝试String_Split参考https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql Sql期待已久的函数(如msdn所说)

Declare @tbl table (id int Identity(1,1), value nvarchar(5))

Insert into @tbl ([value]) SELECT value from STRING_SPLIT(@searchstring,'/')   

Declare @id int
Select @id = cast(value as int) from @tbl where id=2 --will give 1

Declare @value int
Select @id = cast(value as int) from @tbl where id=1 --ill give 2017

--   —now use them in sql

select * from table where YEAR=@value and ID = @id

答案 3 :(得分:1)

如果您执行以下任何操作,您将会搞砸性能

  

从表中选择*,其中'年/ ID'喜欢'%searchterm%'

最好的方法是将搜索和供应分成相应的col

  Declare @Search varchar(15)='2017/1'
        Declare @Year int = (select LEFT(@Search,CHARINDEX('/',@search)-1))
        Declare @month int = (select Right(@Search,(len(@search) -CHARINDEX('/',@search))))
        select * from #temp where id=@month and year=@Year

答案 4 :(得分:0)

试试这段代码:

select * from table where YEAR + ' / ' + ID LIKE '%searchterm%'

此查询将运行,但它的执行效果会很差。