从 SQL 中的字符串中获取第二个
Get 2nd from string in SQL
我在 SQL 中有一个要求,我在其中获取字符串并且需要获取顶部第二行。
我使用的是 SQL 2014 版
我有一个字符串,我要使用字符 'M'
吐出它
字符串如下:3908K88513K1992K898593M
如果我传递输入:88513
我需要得到输出 898593
另一个例子是
字符串:24572K12345K10981K19809K
如果输入是 19809
输出应该是:12345
我试过下面的代码,但它在第二个输入示例字符串时失败了:
SELECT TOP 1 T.*
FROM (
SELECT TOP 2 *
FROM splitfunction((
SELECT number
FROM name
WHERE id = 100709
), 'K')
) AS T
ORDER BY 1 DESC;
正如 Jarlh 在评论中提到的,不要使用 TOP
,而是使用 OFFSET
和 FETCH
:
SELECT ss.* --This should be your columns
FROM dbo.contact c
CROSS APPLY dbo.dba_splitstring(c.structureno,'M') ss
WHERE c.recno = 100719
ORDER BY {????} --Your ORDER BY was missing in your query
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY;
我还重新制定了您的查询,因为所有这些子查询都不是必需的。
我在 SQL 中有一个要求,我在其中获取字符串并且需要获取顶部第二行。
我使用的是 SQL 2014 版
我有一个字符串,我要使用字符 'M'
吐出它
字符串如下:3908K88513K1992K898593M
如果我传递输入:88513
我需要得到输出 898593
另一个例子是
字符串:24572K12345K10981K19809K
如果输入是 19809
输出应该是:12345
我试过下面的代码,但它在第二个输入示例字符串时失败了:
SELECT TOP 1 T.*
FROM (
SELECT TOP 2 *
FROM splitfunction((
SELECT number
FROM name
WHERE id = 100709
), 'K')
) AS T
ORDER BY 1 DESC;
正如 Jarlh 在评论中提到的,不要使用 TOP
,而是使用 OFFSET
和 FETCH
:
SELECT ss.* --This should be your columns
FROM dbo.contact c
CROSS APPLY dbo.dba_splitstring(c.structureno,'M') ss
WHERE c.recno = 100719
ORDER BY {????} --Your ORDER BY was missing in your query
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY;
我还重新制定了您的查询,因为所有这些子查询都不是必需的。