【发布时间】:2019-04-04 17:42:52
【问题描述】:
我正在尝试使用 SQL 变量中的值列表(包括范围)来实现搜索功能。感谢任何指向正确方法的指导/链接。
以下是数据集:
CREATE TABLE [dbo].[Books]
(
[ID] [NCHAR](10) NOT NULL,
[AUTHCODE] [NCHAR](10) NULL,
[TITLE] [NCHAR](10) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Books] ([ID], [AUTHCODE], [TITLE])
VALUES (N'1', N'nk', N'Book1'),
(N'2', N'an', N'Book2'),
(N'3', N'mn', N'Book3'),
(N'4', N'ra', N'Book4'),
(N'5', N'kd', N'Book5'),
(N'6', N'nk', N'Book6'),
(N'7', N'an', N'Book7'),
(N'8', N'ra', N'Book8'),
(N'9', N'kd', N'Book9'),
(N'10', N'mn', N'Book10 ')
GO
下面我尝试使用 SQL IN 子句进行过滤,但这不会返回所需的结果。
select * from books
declare @List1 varchar(max) = '2,4,6,7,8,9' --simple list
select *
from books
where id in (@List1)
declare @List2 varchar(max) = '2,4-7,9' --list with range
select *
from books
where id in (@List2)
【问题讨论】:
-
提示:
DECLARE @List1 as table (id int);. -
在较新版本的 mssql 中有一个 split_string (srring_split) 函数。这可能会让你朝着正确的方向前进。 Sql in() 接受多个参数,varhar() 只会是单个字符串
标签: sql sql-server tsql