ms sql-求个SQL 写法,万分感谢

问题描述

求个SQL 写法,万分感谢

我想实现如下的描述效果:

查询ReferralPath 字段,里面 4 这个数字的位置,按照 '|' 来分割

比如4在 ReferralPath 第一个的位置,结果应该是UserID=7和8的2条记录

4在ReferralPath 第二个的位置, 结果应该是UserID=9和12的2条记录

4在ReferralPath 第三个的位置, 结果应该是UserID=5和10和11 的3条记录

求MSSQL实现方法,万分感谢

解决方案

没太明白你说的意思,不知以下是不是你想要的。

--4在第一
select * from 表名 u where u.ReferralPath like '4%';

--4在第二
select * from 表名 u where u.ReferralPath like '%|4|%';

--4在第三
select * from 表名 u where u.ReferralPath like '%4';

解决方案二:

--使用substring('String',star,end) 截取字符串

--第一个
select * from table as A where left(A.ReferraPath, 1) = '4'
--还可以写为
select * from table as A where substring(A.ReferralPath ,1,1) = '4'
--第二个
select * from table as A where substring(A.ReferralPath ,3,3) = '4'
--第三个
select * from table as A where substring(A.ReferralPath ,5,5) = '4'

解决方案三:

我目前的解决方案是:
SELECT * FROM (
SELECT (len(ReferralPath)-len(replace(ReferralPath, '|', ''))) as Rs FROM vw_aspnet_Members where ( ('|'+ReferralPath+'|') like '%|1455 |%' OR ReferralPath=1455) as MyTwitter WHERE 1=1

在这里加条件判断:
一级: AND ReferralUserId=1455

二级: and ((Rs=1 AND (SELECT UnitInt FROM(select *,ROW_NUMBER() over(order by UnitInt) as row from dbo.F_SplitToInt(ReferralPath,'|'))A WHERE row=1)=1455) OR (Rs=2 AND (SELECT UnitInt FROM(select *,ROW_NUMBER() over(order by UnitInt) as row from dbo.F_SplitToInt(ReferralPath,'|'))A WHERE row=2)=1455))

三级: and Rs=2 AND (SELECT UnitInt FROM(select *,ROW_NUMBER() over(order by UnitInt) as row from dbo.F_SplitToInt(ReferralPath,'|'))A WHERE row=1)=1455

F_SplitToInt 这个为个函数方法用来分割ReferralPath ,返回个数据集 SQL写法如下:

CREATE FUNCTION [dbo].F_SplitToInt,
@spliter nvarchar(2)
)
RETURNS @returntable TABLE (UnitInt INT)
AS
BEGIN
WHILE(CHARINDEX(@spliter,@str)<>0)

BEGIN

INSERT INTO @returntable(UnitInt) SELECT CAST (SUBSTRING(@str,1,CHARINDEX(@spliter,@str)-1) AS INT)
SET @str = STUFF(@str,1,CHARINDEX(@spliter,@str),'')

END

INSERT INTO @returntable(UnitInt) SELECT CAST (@str AS INT) 

RETURN

END

由于用了这个函数方法,导致整个SQL的性乱地下,求解决方法和思路,万分感谢

解决方案四:

select dbo.getIndex('2432|222|335','222','|') --结果为2

select dbo.getIndex('2432|222|335','2022','|') -- 结果为 -1

select dbo.getIndex('2432|222|335','2432','|') -- 结果为 1

select 1 where dbo.getIndex('2432|222|335','222','|') = 2 --- 单位置为2时输出 1
这样应该会用了吧

-- =============================================================================================
-- Author: swdenglian
-- Create date: 2015年12月2日 00:04:54
-- Description: 获取字符串(分隔符)位置,@str 原字符串,@strTarget 目标字符串,@char分隔符
-- =============================================================================================
create function getIndex(@str nvarchar(200),@strTarget nvarchar(200),@char nvarchar(10))
returns int
as
begin
declare @num int
declare @strSub varchar(200)

select @strSub = substring(@str,0,charindex(@strTarget,@str)) -- 截取字符串 例如:dbo.getIndex('2432|222|335','222','|') 截取结果为2432|
select @num = (LEN(@strSub) - LEN(REPLACE(@strSub,@char,''))) -- 计算位置

if(@num is NULL) --如果@strTarget 不在@str 中则将 @num 该为''
begin
select @num = replace(@num,NULL,'')
end

if(@num <> '') --判断如果num 不为'' 返回 字符串所在位置
return @num + 1

return -1 -- 否则返回-1,即表示目标字符串不在原字符串中
end
go

解决方案五:

-- =============================================================================================
-- Author: swdenglian
-- Create date: 2015年12月2日 00:04:54
-- Description: 获取字符串(分隔符)位置,@str 原字符串,@strTarget 目标字符串,@char分隔符
-- Modify[1]: <swdenglian,2015年12月4日 10:50:02,修改bug,当数据@strTarget不在@str中和在第一位置无区别修改
-- =============================================================================================

create function getIndex(@str nvarchar(200),@strTarget nvarchar(200),@char nvarchar(10))
returns int
as
begin
declare @num int
declare @strSub varchar(200)

if(charindex(@strTarget,@str) = 0)
return -1;

select @strSub = substring(@str,0,charindex(@strTarget,@str)) -- 截取字符串 例如:dbo.getIndex('2432|222|335','222','|') 截取结果为2432|
select @num = (LEN(@strSub) - LEN(REPLACE(@strSub,@char,''))) -- 计算位置

if(@num = 0)
begin
return 1;
end

return @num + 1
end
go

----使用方式为
select * from index_
select userid from index_ as a where dbo.getIndex(a.perPath,'4','|') = num

--num值
(-1:不在perPath中)
(1:第一位,2:第二位,3:第三位,以此类推)

时间: 2025-01-07 19:03:50

ms sql-求个SQL 写法,万分感谢的相关文章

哈夫曼译码-谁能个给下面的哈夫曼程序加一段译码的代码,求高手热心人,万分感谢!!!

问题描述 谁能个给下面的哈夫曼程序加一段译码的代码,求高手热心人,万分感谢!!! #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 10 // 带编码字符的个数,即树中叶结点的最大个数 #define M (2*N-1) // 树中总的结点数目 class HTNode{ // 树中结点的结构 public: char data; int weight

R语言如何实现输出数据框里的特定值对象 急求大家帮助,万分感谢!

问题描述 R语言如何实现输出数据框里的特定值对象 急求大家帮助,万分感谢! 5C 对于一个数据框X,其有三个属性{abc}如下:a b c1 2 22 3 34 2 55 5 62 1 76 2 73 6 8如何实现把属性b=2的全部对象输出:a b c1 2 24 2 56 2 7急求大家帮助,万分感谢! 解决方案 不知道你的数据源是什么,这里用矩阵试了一下: 参考:<R语言入门>矩阵元素定义及筛选

session-求大神帮帮忙,有一句代码不理解,求详解,万分感谢~return

问题描述 求大神帮帮忙,有一句代码不理解,求详解,万分感谢~return 求大神重点详细地讲解下,try里的那段代码,万分感谢 `` public ZheJiuSheZhi get(int id) { Session sess = this.getSessionFactory().openSession(); try { return (ZheJiuSheZhi) sess.get(ZheJiuSheZhi.class, id); } finally { sess.close(); } }` 解

xmlhttprequest-多个ajax请求,返回值后覆盖掉之前的请求结果,求各位解答!万分感谢!

问题描述 多个ajax请求,返回值后覆盖掉之前的请求结果,求各位解答!万分感谢! 需求:下拉框选择完演出,自动显示对应时间.地点.票价等信息(是想自动改变对应select下拉框的值) 问题: 目前是单个ajax都能显示(是在同一个div), 多个就不行了,只显示最后一个(也是同一个位置,应该是被覆盖了), 看了一些文章也找不到合适的解决方法,求各位前辈指点! 我使用的实例是这个http://www.w3school.com.cn/php/php_ajax_database.asp 具体代码可见:

asp.net中连接IP.21实时数据库,要怎么用?求大神,万分感谢。急急急!!!

问题描述 asp.net中连接IP.21实时数据库,要怎么用?求大神,万分感谢.急急急!!! 解决方案 解决方案二:大神在哪里???

急求问黎活明老师的 velocity教学视频在哪能找到!万分感谢!

问题描述 Velocity的教学视频我找了好久都找不到,求告知!!万分感谢 解决方案 解决方案二:Velocity非要看视频吗?看看资料介绍就可以拉,比较简单的哦.CSDN上都有下载文档了:解决方案三:该回复于2010-12-14 14:41:49被版主删除解决方案四:该回复于2010-12-14 15:36:50被版主删除

求SQL高手帮我写一个存储过程,万分感谢!

问题描述 求SQL高手帮我写一个存储过程,万分感谢! 求高手帮帮我..是一个保险类的表.要展示出目标值 实际值 达成率 上年同期 同比增长 指标代码都在图里 解决方案 拍照技术太差了,都不好看 解决方案二: 再记一个SQL分页存储过程 解决方案三: 会是会,但是不太想写, 一.题目要求资料看不清 二.50C吸引力不大 三.如果是你的作业,那你还是自己动手练习:如果是你的工作,那这价值可不止50C

sql-新手关于SQL按规则查询问题,万分感谢!

问题描述 新手关于SQL按规则查询问题,万分感谢! 如表: col1 col2 col3 1 00:01 101 30 2 00:03 102 26 3 00:01 102 28 4 00:03 101 22 5 00:03 103 37 6 00:01 103 16 需要输出表: col1 col2 col3 col4 col5 col6 col7 1 00:01 101 30 102 28 103 16 2 00:03 101 22 102 26 103 37 SQL查询比较菜,请教大神,谢

求一sql写法

问题描述 求一sql目前有两个表资源表ResourceIDResourceNameResourceGroupIDR1kkRG1R2ddRG1R3aaRG1R4bbRG2R5ccRG2R6eeRG3R7ffRG4R8ggRG5资源有效表ResourceAvailResourceIDResourceGroupIDIsBandToGroupRA1R1falseRA2RG2trueRa3R7falseRA4RG3falseRA5R4false需要列出资源有效表中的所有资源Resource谢谢 解决方案