我将尝试展示我想要实现的目标。对我来说,这是一个过于简单的例子。
假设我有一个包含两列的表
ID YEAR
--- ----
1 2017
2 2018
我有一个搜索字词2017 / 1
我想做的是这样的事情
select * from table where 'YEAR / ID' LIKE '%searchterm%'
这可能吗?
提前致谢。
答案 0 :(得分:2)
在我看来,最有效的方法是:
首先将String x =“2017/1”划分为两个int值int year = 2017,int id = 1.我不知道您使用的是哪种编程语言,但所有编程语言都有特殊功能很容易(在所有值之间'/')。
然后使用此查询:
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%'
此查询将运行,但它的执行效果会很差。