SQL语句写法

就这种数据永远只选取最末级的FNumber,但是具体多少层是不固定的,怎么写sql 语句呀?数据库版本是sql server 2016.image.png

FineReport ceshishujuku 发布于 2024-2-21 15:09
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
luojian0323Lv7资深互助
发布于2024-2-21 15:17

reverse是把字符串倒置,然后通过charindex来获取倒置之后第一个*的位置,然后使用substring函数进行字符串截取,截取后再使用reverse倒置回来即可。以下为例子declare @str varchar(20)set @str = '10*20*300'select reverse(substring(reverse(@str),1,charindex('*',reverse(@str)) - 1))结果是300以上是SQLSERVER的语法。

最佳回答
0
华莉星宸Lv6高级互助
发布于2024-2-21 15:17

是不是还有一列父节点字段?

没有的话,增加一个父级字段

如果FNumber不在父级字段里面,就是末级

最佳回答
0
shirokoLv6资深互助
发布于2024-2-21 15:26

很简单就是找点是最多的数据就好了吧?

SELECT * FROM your_table A

WHERE  LEN(FNumber) - LEN(REPLACE(FNumber, '.', '')) =(SELECT MAX(LEN(FNumber) - LEN(REPLACE(FNumber, '.', ''))) FROM your_table)

最佳回答
0
JL98Lv6中级互助
发布于2024-2-21 15:26(编辑于 2024-2-21 15:27)

提供一个思路:FNumber按前四位分组,计算FNumber字段长度,只要分组下最大长度的值

  • 5关注人数
  • 201浏览人数
  • 最后回答于:2024-2-21 15:27
    请选择关闭问题的原因
    确定 取消
    返回顶部