例:如下图,name有下图这些数据,如何使用公式实现指定名称张三按照下图这样排序

image.png

FineReport 帆软用户ICfzeObrHc 发布于 2023-1-9 17:00
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-1-9 17:01(编辑于 2023-1-10 09:09)

oracle?mysql?SqlServer?

---------------------

 WITH ta as (

select '1.60张三' [a]UNION ALL

SELECT '1.67张三Pro' UNION ALL

SELECT '1.60张三Pro' UNION ALL

SELECT '1.71张三Pro'  UNION ALL

SELECT '1.71张三' 

)

SELECT * FROM (

SELECT (CASE WHEN  PATINDEX ('%[0-9]张三%',a)>0 THEN  CONVERT(decimal(20,6),SUBSTRING(a,1,PATINDEX ('%[0-9]张三%',a))) WHEN  PATINDEX ('%张三[0-9]%',a)>0 THEN CONVERT(decimal(20,6),SUBSTRING(a,PATINDEX ('%[0-9]张三%',a)+3,LEN(A)))  ELSE LEN(ISNULL(SUBSTRING(A, PATINDEX ('%张三%',a)+2,LEN(A)),'')) END) [I],* from ta

) T ORDER BY T.I ASC,LEN(A) ASC

image.png

  • 帆软用户ICfzeObrHc 帆软用户ICfzeObrHc(提问者) Sqlserver
    2023-01-09 17:01 
  • Z4u3z1 Z4u3z1 回复 帆软用户ICfzeObrHc(提问者) SELECT * FROM TABLE ORDER BY (CASE WHEN NAME LIKE \'%张三%\' THEN LEN(NAME) ELSE NAME END) ASC
    2023-01-09 17:05 
  • 帆软用户ICfzeObrHc 帆软用户ICfzeObrHc(提问者) 回复 Z4u3z1 这个用公式该如何实现,因为实际数据可能是1.60张三,1.71李四前面带数字的
    2023-01-09 17:12 
  • Z4u3z1 Z4u3z1 回复 帆软用户ICfzeObrHc(提问者) 那你把情况说完:数字在前的,数字在后的,数字加字母的 等等各种情况下怎么排?多种情况下那种排在前面,哪种排在后面?
    2023-01-09 17:15 
  • 帆软用户ICfzeObrHc 帆软用户ICfzeObrHc(提问者) 回复 Z4u3z1 例如有:1.60张三,1.60张三Pro,1.67张三Pro,1.71张三,1.71张三Pro 这些数据,就按照这样的顺序进行排列,其他数据正常排列
    2023-01-09 17:20 
最佳回答
0
CD20160914Lv8专家互助
发布于2023-1-9 17:01
最佳回答
0
开心的DadyLv3见习互助
发布于2023-1-10 10:50

直接order by name就行了啊iShot_2023-01-10_10.48.37.png

  • 3关注人数
  • 304浏览人数
  • 最后回答于:2023-1-10 10:50
    请选择关闭问题的原因
    确定 取消
    返回顶部