【问题标题】:Get 2nd from string in SQL从 SQL 中的字符串中获取第二个
【发布时间】:2021-02-10 15:40:27
【问题描述】:

我在 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;

【问题讨论】:

  • 使用 OFFSET / FETCH FIRST 而不是 TOP。
  • 查看您的 2 个示例,两者的顺序甚至都不相同。一个返回值after,而另一个返回值before。什么表示“下一个”值的方向?

标签: sql sql-server sql-order-by sql-limit


【解决方案1】:

正如 Jarlh 在 cmets 中提到的,不要使用 TOP,而是使用 OFFSETFETCH

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;

我还重新制定了您的查询,因为所有这些子查询都不是必需的。

【讨论】:

  • 这不是我在答案中输入的代码,@asdfghjkljhgfdfg ...您那里有一个子查询。你不需要那个。您唯一需要替换的是{????},因为您没有在原始查询中定义订单。
  • 是的,您对其进行了编辑,并且格式错误,@asdfghjkljhgfdfg ...尽管后者没有意义;这将始终给出ORDER BY 定义的第二行。对于具有值的行。听起来您还没有告诉我们这里 真正的 问题。您应该在问题中添加示例数据和预期结果;但是,如果它显着改变了问题,那么现在您的答案可能会令人不悦。
  • 200006 不是第二行,@asdfghjkljhgfdfg,它是第一行。
  • 这是一个不同的问题,@asdfghjkljhgfdfg ...您正在移动球门柱。如果您要问一个新问题,请发布一个新问题。不要发布问题、询问某事、获得答案,然后再移动目标帖子。
猜你喜欢
  • 2014-06-08
  • 2022-12-13
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多