sql - 如何在不同的字符串中找到特定字符串位置的特定值
问题描述
我有一个像
,x,x,y,x,x,O,x,y这样的刺,它与另一个像
0~1~b~~z~XY~1~7
这样的刺中的值相匹配。
值“O”可以切换它在字符串中的位置,就像另一个字符串中的值一样。
值“O”位于第 6 位,因此预期结果将是“XY”。
第一个字符串总是在每个值之前以“,”开头。第二个字符串首先以值开头,后跟“~”。
“O”是一个不会改变的给定值,所以我总是必须在第二个字符串中找到“O”所在位置的给定值。
这就是我所期望的:
,x,x,y,x,x,O,x,y
0~1~b~~z~XY~1~7
O=XY
,x,O,y,x,x ,y,x,y
0~1~b~~z~XY~1~7
O=1
谢谢。
解决方案
获取DelimitedSplit8K的副本,然后您可以执行以下操作:
DECLARE @string1 VARCHAR(1000) = ',x,x,y,x,x,O,x,y',
@string2 VARCHAR(1000) = '0~1~b~~z~XY~1~7';
DECLARE @search VARCHAR(1000) = 'O'; -- best as a variable/parameter
SELECT *
FROM dbo.delimitedSplit8K(@string2,'~') AS s
WHERE s.itemNumber =
(
SELECT TOP (1) s2.itemNumber -- TOP (1) until we know about dupicates
FROM dbo.delimitedSplit8K(@string1,',') AS s2
WHERE s2.item = @search
)-1;
回报:
ItemNumber Item
-------------------- -------
6 XY
推荐阅读
- swift - Xero-Api and Vapor 3 unable to connect to recive token
- r - 有没有办法将 facet_wrap_paginate 函数与 grid.arrange 函数结合起来?
- android - 如何在此对话框中开始另一个活动?
- javascript - 如何将threejs THREE.MeshPhongMaterial生成的颜色代码转换为HEX
- c++ - C++做while循环菜单
- c# - .net core中的魔清DI-ed DbContext
- mysql - 在一个查询中获取同一张表的总数并在计数后创建
- c# - Xamarin Forms 运行后台线程的最佳方式
- ruby-on-rails - 在 Rails 中分叉独角兽进程时单例消失
- sql - SQL中的多列重复