久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用帶有 SQL 變量的 WHERE IN 子句在 SQL 中搜索包括

Search list of values including range in SQL using WHERE IN clause with SQL variable?(使用帶有 SQL 變量的 WHERE IN 子句在 SQL 中搜索包括范圍的值列表?)
本文介紹了使用帶有 SQL 變量的 WHERE IN 子句在 SQL 中搜索包括范圍的值列表?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試使用 SQL 變量中的值列表(包括范圍)來實現搜索功能.感謝任何指向正確方法的指導/鏈接.

I am trying to implement search functionality with list of values in SQL variable, including range. Appreciate any guidance/links pointing to correct approach for this.

以下是數據集:

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 子句進行過濾,但這不會返回所需的結果.

Below I am trying to filter using the SQL IN clause but this does not return desired result.

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)

推薦答案

你不能直接使用字符串作為列表,但你可以使用 STRING_SPLIT (Transact-SQL) 如果你真的需要將過濾參數作為字符串傳遞:

You cannot directly use strings as lists, but you can do use STRING_SPLIT (Transact-SQL) if you really need to pass filtering parameters as strings:

declare @list varchar(max) = '2,4,6-8,9'
declare @filter table (id1 int, id2 int)

insert into @filter (id1,id2)
select
    case when b.pos > 0 then left(a.[value], pos - 1) else a.[value] end as id1,
    case when b.pos > 0 then right(a.[value], len(a.[value]) - pos) else a.[value] end as id2
from string_split(@list, ',') as a
    cross apply (select charindex('-', a.[value]) as pos) as b

select *
from [dbo].[Books] as b
where
    exists (select * from @filter as tt where b.id between tt.id1 and tt.id2)

也可能將過濾器作為 json 和 OPENJSON (Transact-SQL) 這樣你就可以簡化解析部分:

Also it might be an idea to pass your filter as json and OPENJSON (Transact-SQL) so you can make parsing part simplier:

declare @list varchar(max) = '[2,4,[6,8],9]'

select
    case when a.[type] = 4 then json_value(a.[value], '$[0]') else a.[value] end,
    case when a.[type] = 4 then json_value(a.[value], '$[1]') else a.[value] end
from openjson(@list) as a

當然,以上所有僅適用于您擁有 Sql Server 2016 或更高版本

All above, of course, only applicable if you have Sql Server 2016 or higher

這篇關于使用帶有 SQL 變量的 WHERE IN 子句在 SQL 中搜索包括范圍的值列表?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 欧美精品一区二区三区四区五区 | 狠狠干狠狠插 | 在线观看亚洲精品视频 | 国产一区二 | 夜夜精品浪潮av一区二区三区 | 影音先锋中文字幕在线观看 | 久久精品国产亚洲一区二区三区 | 亚洲国产18| 久久精品国产一区二区电影 | 仙人掌旅馆在线观看 | 天天操精品视频 | 日韩精品一区二区三区四区视频 | chengrenzaixian| 国产精品成人一区二区三区 | 久久av一区二区三区 | 亚洲一区二区精品视频 | 亚洲a毛片| 欧美11一13sex性hd | 在线一区视频 | 一级黄在线观看 | 欧美精品久久久久久 | 最近日韩中文字幕 | 一区二区三区在线播放 | 国产精品精品 | 久久久久久高潮国产精品视 | 国产精品国产三级国产aⅴ中文 | 亚洲一区在线日韩在线深爱 | 精品欧美视频 | 日本午夜免费福利视频 | 天天干视频在线 | 中文字幕亚洲专区 | 亚洲福利精品 | 国产在线一区二区三区 | 青青艹在线视频 | 亚洲狠狠爱| 毛片免费观看视频 | 国产精品久久久久久久久久久久久 | 亚洲精品国产第一综合99久久 | 黄色毛片在线播放 | 精品国产一级 | 成人久久视频 |