Oracle数据库,为什么用to_date函数的时候没有按我要求进行格式转换

如下图,我无法直接用 to_date获取数据库OUTBOUNDDATE字段的时间,只能先用 to_date套to_char函数,但是无论是to_char还是to_date我都没有要求精确到秒,但是select 之后的结果居然是精确到了毫秒级。导致我用时间搜索数据一直在报错。

图片.png

yydcwl 发布于 2022-8-2 20:25 (编辑于 2022-8-2 20:33)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-8-3 08:58(编辑于 2022-8-3 10:03)

oracel对日期格式的要求,不像mysql那么松了。它是很严格的。类型与格式都很严格。你这个转换成了时间。它只是在帆软设计器看到有毫秒了。但是在plsql或者其它工具中又是没有的。你最终要放在单元格看出来的结果就知道了。这个只是在设计器中这样显示而已。。

image.png在数据库工具中最外面套用to_date一样有秒。。

但是在设计器中它不但有秒。还有毫秒显示

image.png

这个其实没有影响的。你放在单元格中设置格式就行了。。。不然就直接只用to_char就行了。。。

image.png

image.png

  • yydcwl yydcwl(提问者) 试试在帆软用 select to_date(sysdate,\'yyyy-mm-dd\') from dual 直接报错,但是在pl/sql developer 用这个语句却是可以的
    2022-08-03 09:58 
  • CD20160914 CD20160914 回复 yydcwl(提问者) 不可能呀。你的sysdate本来就是日期格式了。你再用to_date格式化。肯定会报错的呀。plsql也会报错的呀。要套to_char函数了。如果本身是日期了就要to_char,如果本身是文本格式就要套to_datye
    2022-08-03 10:02 
  • CD20160914 CD20160914 回复 yydcwl(提问者) 看我上面plsql的截图。不可能可以的。。
    2022-08-03 10:02 
  • yydcwl yydcwl(提问者) 回复 CD20160914 懂了。字符串和日期类型互转
    2022-08-03 14:52 
最佳回答
0
用户6NWif5139660Lv6资深互助
发布于2022-8-2 20:56

image.png

  • yydcwl yydcwl(提问者) 理论上来说,to_date函数不应该包含毫秒的,而且我指定的格式没有要求显示 ss
    2022-08-03 09:49 
最佳回答
0
3143511Lv5中级互助
发布于2022-8-3 08:23

亲,这可能是Oracle数据中的时间格式为'.NLS_DATE_FORMAT',这种格式会默认填充小时和秒为00:00

1、网上有更改格式为'NLS_DATE_FORMAT'的方法,链接如下:

http://t.zoukankan.com/ivictor-p-3924963.html

2、换一种思路,在帆软中计算、排序用str类型也可以啊,在to_char的时候,格式是想要的格式:

1659484561376(1).jpg

3、利用str也可以计算的,还可以利用帆软的数值转换函数format()来处理,链接如下:

https://help.fanruan.com/finebi/doc-view-1454.html

希望可以帮到你

  • yydcwl yydcwl(提问者) 试试在帆软用 select to_date(sysdate,\'yyyy-mm-dd\') from dual 直接报错,但是在pl/sql developer 用这个语句却是可以的
    2022-08-03 09:57 
  • 3143511 3143511 回复 yydcwl(提问者) dual这个不行啊,from对应的报表试试,我说的在服软中用是指先转换成字符串,然后利用format()函数处理,实在不行,发下具体需求
    2022-08-03 13:23 
  • yydcwl yydcwl(提问者) 回复 3143511 懂了。字符串和日期类型互转
    2022-08-03 14:52 
最佳回答
0
shirokoLv6资深互助
发布于2022-8-3 09:19(编辑于 2022-8-3 11:00)

to_char就可以了,外面不用再包to_date。

date类型是固定那样显示的,你要显示自定义样式就是转字符串也就是to_char

========

and to_char(xxx,'...')='${控件名}'

  • yydcwl yydcwl(提问者) 其实我是想要在设计器里面添加where 条件,但是 发现date类型无法和控件值比较,或者你试试 在帆软用 select to_date(sysdate,\'yyyy-mm-dd\') from dual 直接报错,但是在pl/sql developer 用这个语句却是可以的
    2022-08-03 10:00 
  • shiroko shiroko 回复 yydcwl(提问者) 控件值和字段值都转化成字符串比较就行了
    2022-08-03 10:59 
  • shiroko shiroko 回复 yydcwl(提问者) to_date(sysdate,\'yyyy-mm-dd\') ,当然报错,因为sysdate已经是date类型了,这里应该用to_char,plsql里面可能有其他兼容处理避免了报错
    2022-08-03 11:01 
  • yydcwl yydcwl(提问者) 回复 shiroko 谢谢。字符串和日期类型互转
    2022-08-03 14:53 
  • 5关注人数
  • 630浏览人数
  • 最后回答于:2022-8-3 11:00
    请选择关闭问题的原因
    确定 取消
    返回顶部