能否实现将字符串中的汉字数字变成阿拉伯数字,因为排序默认按照拼音进行,与所需要的目标不符合

例子:

        列a的值为:测试一,测试二,测试三

方法:用order by a

运行结果:排序结果是    测试二,测试三,测试一

需求:能否实现按照 测试一,测试二,测试三的顺序进行排序

数据库:SQLServer

可以用的方法:SQL数据集中实现或扩展排序实现

墨残烛 发布于 2021-12-30 14:07 (编辑于 2021-12-30 14:34)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
CD20160914Lv8专家互助
发布于2021-12-30 14:09(编辑于 2021-12-30 15:09)
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-12-30 14:10(编辑于 2021-12-30 15:07)

order by (case when a='测试一' then 0 when a='测试二' then 1  when a='测试三' then 2  else 9999 end) asc

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

WITH A AS (

SELECT 'SSS一方5G45法' [A]

UNION ALL

SELECT 'SSS2二G54方法' [A]

UNION ALL

SELECT 'SS3S三方FGRTT法' [A]

UNION ALL

SELECT 'SSR4S四T4T方法' [A]

UNION ALL

SELECT 'SS2S五方FG54G5法' [A]

UNION ALL

SELECT 'SSS3六方GEG3法' [A]

UNION ALL

SELECT 'SSDGS七方GG法' [A]

UNION ALL

SELECT 'SSE32S八方24法' [A]

UNION ALL

SELECT 'SSVRS九方63法' [A]

UNION ALL

SELECT 'SSSDVVS十方34法' [A]

UNION ALL

SELECT 'SSCVRVS十一方43法' [A]

UNION ALL

SELECT 'SSVDFS十二方TY法' [A]

UNION ALL

SELECT 'SSDCS十三方R法' [A]

)

SELECT * FROM A ORDER BY (CASE WHEN A LIKE '%十三%' THEN 0 

WHEN A LIKE '%十二%' THEN 1 

WHEN A LIKE '%十一%' THEN 2 

WHEN A LIKE '%十%' THEN 3

WHEN A LIKE '%九%' THEN 4

WHEN A LIKE '%八%' THEN 5

WHEN A LIKE '%七%' THEN 6

WHEN A LIKE '%六%' THEN 7

WHEN A LIKE '%五%' THEN 8

WHEN A LIKE '%四%' THEN 9

WHEN A LIKE '%三%' THEN 10

WHEN A LIKE '%二%' THEN 11

WHEN A LIKE '%一%' THEN 12

 ELSE -1 END) DESC

image.png

  • 墨残烛 墨残烛(提问者) 测试只是举例,实际的一二三是包裹在一个字符串的内部
    2021-12-30 14:13 
  • Z4u3z1 Z4u3z1 回复 墨残烛(提问者) 把等号 改成like 嘛
    2021-12-30 14:17 
  • Z4u3z1 Z4u3z1 回复 墨残烛(提问者) order by (case when a like\'%一%\' then 0 when a like \'%二%\' then 1 when a like \'%三%\' then 2 else 9999 end) asc
    2021-12-30 14:18 
  • 墨残烛 墨残烛(提问者) 你这方法将包含数字的和不包含的给直接区分开排序了,但是这两者的先后你没有进行排序,而是直接默认指定了一个顺序
    2021-12-30 15:24 
  • Z4u3z1 Z4u3z1 回复 墨残烛(提问者) “你这方法将包含数字的和不包含的给直接区分开排序了,但是这两者的先后你没有进行排序,而是直接默认指定了一个顺序” 我懵了,这两者你还要什么顺序?
    2021-12-30 15:33 
最佳回答
0
linbodingLv6中级互助
发布于2021-12-30 14:12(编辑于 2021-12-30 14:12)

select * from LiWei order by charindex(SUBSTRING(name,2,1),'一二三四五六七八九十')

image.png

  • 墨残烛 墨残烛(提问者) 你这个是能确定数字的位置的,实际中数字的位置不确定在字符串的哪个位置
    2021-12-30 14:16 
  • 墨残烛 墨残烛(提问者) 就是里面有些是有中文数字的,有些是纯文字的,但是按照你这个的情况,那些纯文字的会默认被排在上面
    2021-12-30 14:32 
最佳回答
0
檬茶茶Lv4初级互助
发布于2021-12-30 14:17

如果是在十以内的,order by 是可以从大到小进行排序的,这样可以先把字符串里的数字截取成一个新列再排序

最佳回答
0
飞段Lv6初级互助
发布于2021-12-30 16:29(编辑于 2021-12-30 16:30)

如果这个字段种类不多的话可以用sql里面的case when函数。给他赋值新的序号,然后根据新的序号排序

              case

         WHEN Q2.OPERATION_DESC = '一车间半片双玻焊接'  or

          Q2.OPERATION_DESC = '一车间半玻焊接' or

         Q2.OPERATION_DESC = '三车间双玻焊接'  or

         Q2.OPERATION_DESC = '三车间焊接'  

          THEN

          '00'

         WHEN Q2.OPERATION_DESC = '一车间叠层'  or

         Q2.OPERATION_DESC = '一车间双玻叠层'  or

         Q2.OPERATION_DESC = '一车间半玻叠层'  or

         Q2.OPERATION_DESC = '一车间半片双玻叠层' or

          Q2.OPERATION_DESC = '组件二车间叠层' or

          Q2. OPERATION_DESC='三车间叠层' or Q2. OPERATION_DESC='三车间双玻叠层'

          THEN

          '01'

         when Q2.OPERATION_DESC = '一车间层前EL' then

          '02'

           when Q2.OPERATION_DESC = '组件二车间前EL' or Q2.OPERATION_DESC = '三车间层前EL' then

          '02'

         WHEN Q2.OPERATION_DESC = '一车间层压'  or Q2.OPERATION_DESC = '组件二车间层压' or Q2.OPERATION_DESC = '三车间层压' then

          '03'

     

         WHEN Q2.OPERATION_DESC = '一车间层压后镜检' or Q2.OPERATION_DESC ='组件二车间层压后镜检'  or Q2.OPERATION_DESC ='三车间层压后镜检' then

          '05'

         WHEN Q2.OPERATION_DESC = '一车间装框' or Q2.OPERATION_DESC = '组件二车间装框' or Q2.OPERATION_DESC ='三车间装框' or Q2.OPERATION_DESC = '三车间双玻装框' then

          '06'

         WHEN Q2.OPERATION_DESC = '一车间清洗' or Q2.OPERATION_DESC = '组件二车间清洗' or Q2.OPERATION_DESC ='三车间清洗' then

          '07'

         WHEN Q2.OPERATION_DESC = '一车间IV测试' or Q2.OPERATION_DESC = '组件二车间层后EL' or Q2.OPERATION_DESC ='三车间IV测试' then

          '08'

         WHEN Q2.OPERATION_DESC = '一车间耐压测试' or Q2.OPERATION_DESC = '组件二车间IV测试' then

          '09'

         WHEN Q2.OPERATION_DESC = '一车间层后EL' or Q2.OPERATION_DESC = '组件二车间耐压测试' or Q2.OPERATION_DESC ='三车间层后EL'then

          '10'

       end seq

         

最佳回答
0
梦似幻亦真Lv3见习互助
发布于2022-1-21 16:41
  • 6关注人数
  • 697浏览人数
  • 最后回答于:2022-1-21 16:41
    请选择关闭问题的原因
    确定 取消
    返回顶部