帆软提取数据库数据时,用SQL语句将字符串转化为时间格式

在用帆软从数据库拉取数据时,用了函数  select to_date(20230101200000,'yyyy-mm-dd hh24:mi:ss')  这个时候输出的是 2023-01-01 20:00:00,是正常的。

但是我把字符串换成substr(time,1,14),也就是这样的时候  

select to_date(substr(time,1,14),'yyyy-mm-dd hh24:mi:ss') 出现了报错。而且我检查过数据库中time这个字段没有缺失的,长度全部为14。

求问,这是为什么啊?

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

1、首先检查一下你的time是什么格式类型的

2、数字类型与varhcar2都是可以的

3、把你报错信息发出来

4、你只单独查一行数据,来格式化看是否报错。

image.png

改成这样看是否报错

select 

htno,

pono,

substr(LDCC_BEGIN_TIME,1,4) as year,

substr(LDCC_BEGIN_TIME,5,2) as month,

substr(LDCC_BEGIN_TIME,5,4) as day,

substr(LDCC_BEGIN_TIME,9,4) as time, 

st_no as grade,cast(LDopen_LDweight/1000 as decimal(10,3)) as ladle,

to_date(substr(LDCC_BEGIN_TIME,1,14),'yyyy-mm-dd hh24:mi:ss')  as sj

FROM "BGTAMODLL3"."T_ODS_TMMSM21" 

where  LDCC_BEGIN_TIME>='20230101200000'

and LDCC_BEGIN_TIME<='20230501200000'

  • 帆软用户21wlka79tN 帆软用户21wlka79tN(提问者) 谢谢 已经解决了,之前where \'20230101200000\'<=LDCC_BEGIN_TIME<=\'20230101210000\' 这么写时间没生效,导致很久之前的数据存在缺失一直报错,改成您这种格式,时间生效了就正常了 谢谢您
    2023-05-26 09:31 
最佳回答
0
yzm180820Lv5初级互助
发布于2023-5-25 22:57

你直接select to_date(to_number(substr(time,1,14),'yyyy-mm-dd hh24:mi:ss') 你试试

  • 帆软用户21wlka79tN 帆软用户21wlka79tN(提问者) 谢谢 解决了,之前where \'20230101200000\'<=LDCC_BEGIN_TIME<=\'20230101210000\' 这么写时间没生效,导致很久之前的数据存在缺失一直报错,改成and的形式,时间生效了就正常了 谢谢您
    2023-05-26 09:31 
最佳回答
0
大林3143511Lv5中级互助
发布于2023-5-26 07:45

帆软和数据库中的SQL不会完全一样的,比如Oracle中“;”可以识别分号,帆软就报错,可以在帆软中看看,帆软生成的SQL是什么,和Oracle中的对比下:

1685058287984.jpg

  • 帆软用户21wlka79tN 帆软用户21wlka79tN(提问者) 错误代码 11300001 数据集配置错误。而且运行20次,可能有一次能预览出来,关掉后再重新预览那19次就会报错
    2023-05-26 09:16 
  • 帆软用户21wlka79tN 帆软用户21wlka79tN(提问者) 我发现了 我时间范围没生效 select htno,pono,LDCC_BEGIN_TIME,substr(LDCC_BEGIN_TIME,1,4) as year,substr(LDCC_BEGIN_TIME,5,2) as month,substr(LDCC_BEGIN_TIME,5,4) as day,substr(LDCC_BEGIN_TIME,9,4) as time, st_no as grade,cast(LDopen_LDweight/1000 as decimal(10,3)) as ladle FROM \"BGTAMODLL3\".\"T_ODS_TMMSM21\" where \'20230101200000\'<=LDCC_BEGIN_TIME<=\'20230101210000\' 这个where 为什么会没生效,单引号不生效,双引号,不加引号都报错
    2023-05-26 09:22 
  • 帆软用户21wlka79tN 帆软用户21wlka79tN(提问者) where LDCC_BEGIN_TIME<=\'20230101210000\' and LDCC_BEGIN_TIME >=\'20230101200000\' 解决了 换成这样就解决了 谢谢了 哈哈哈哈
    2023-05-26 09:29 
  • 大林3143511 大林3143511 回复 帆软用户21wlka79tN(提问者) 厉害了,点赞!!!!
    2023-05-26 21:23 
  • 4关注人数
  • 515浏览人数
  • 最后回答于:2023-5-26 09:17
    请选择关闭问题的原因
    确定 取消
    返回顶部