首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:如何选择值等于千的行(一列可以包含多个值)

SQL:如何选择值等于千的行(一列可以包含多个值)
EN

Stack Overflow用户
提问于 2020-03-26 15:50:46
回答 2查看 54关注 0票数 0

您能帮我选择至少包含1个介于1000和1999之间的值的行吗?我拥有的列(nvarchar(255):

col1

代码语言:javascript
复制
5501, 3500
3001, 3050, 4020
 1030, 1010, 1043, 2000
 3010, 1420, 8000, 2044
 1330, 1330, 8000, 3111
 1333, 1132, 8000, 1332

理想的结果:

代码语言:javascript
复制
1030, 1010, 1043, 2000
 3010, 1420, 8000, 2044
 1330, 1330, 8000, 3111
 1333, 1132, 8000, 1332

我尝试使用自己编写的函数splitstring:

代码语言:javascript
复制
ALTER FUNCTION [dbo].[fn_splitstring] ( @stringToSplit VARCHAR(MAX) )
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

 RETURN
END

string_agg(),但它只适用于单行。

非常感谢。

EN

Stack Overflow用户

发布于 2020-03-26 16:42:56

以下是解决方案:

代码语言:javascript
复制
    select * from table s
    where exists (select * from cmn.dbo.fn_splitstring(s.codes,', ') c 
where convert(int,c.item) between 1000 and 1999)

其中cmn.dbo.fn_splitstring如上所述。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60862857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档