文本排序

WeChatd2ee155134eb8f288e20883b60ed4e7b.png

数据表里的time是文本类型,在sql查询数据的时候把time按:PREP.,1,2,3,4,5……的顺序排列

我这样写的

SELECT * FROM INPUT_DESIGN

where state = 1

order by 

decode(TIME,'PREP.',0,TIME*1)

time是文本类型,time*1报错无效的数字

FineReport 耍帅小红帽 发布于 2022-7-5 16:34
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-7-5 16:36(编辑于 2022-7-5 16:43)

因为有文本呀。*1肯定要报错。你是什么数据库?或者在帆软中处理?

oracel里面有很多正则函数。可以只提取数字。。

select REGEXP_REPLACE('mak是123号234','[^0-9]','')*1 as ttn from dual

union all

select nvl(REGEXP_REPLACE('mak','[^0-9]',''),0)*1 as ttn from dual

image.png

帆软中处理就直接

joinarray(GREPARRAY(split(a2,""),REGEXP(item, "[0-9.]")),"")*1  然后你通过这一列的数据排序

  • 耍帅小红帽 耍帅小红帽(提问者) 我是用的Orcal,time是文本类型,排除掉PREP.后,其他的都是数字,我想的是*1可以转换成数值型的
    2022-07-05 16:40 
  • CD20160914 CD20160914 回复 耍帅小红帽(提问者) 看我上面修改的语句。。。直接提取数字。。
    2022-07-05 16:40 
  • CD20160914 CD20160914 回复 耍帅小红帽(提问者) 子查询里面单独用正则提取数字。。然后最外面再套一层查询。。对它排序就行了
    2022-07-05 16:41 
最佳回答
0
花无缺爱吃鱼Lv6初级互助
发布于2022-7-5 16:38(编辑于 2022-7-5 16:47)

oracle吧,用这个lpad两位补0

order语句改一下呢,嘎嘎,order by decode(TIME,'PREP.','00',lpad(TIME,2,'0'))

  • 3关注人数
  • 448浏览人数
  • 最后回答于:2022-7-5 16:47
    请选择关闭问题的原因
    确定 取消
    返回顶部