达梦数据库to_date报错:“非法的时间日期类型数据”

问题描述

最近在数据库升级后,发现有个语句使用to_date(‘2022-01-11 11:22:33’,‘yyyy-mm-dd’)这样格式报错:”非法的时间日期类型数据“。

image-20220323090313192

原因分析

    通过查看两个对应版本的手册,查找发现在新版本中对于to_date转换的字符串数据的默认处理比较严格。通过DATETIME_FAST_RESTRICT参数来控制date的格式为FAST格式时,to_date中字符串是否允许带时间。默认该参数不允许带时间,带时间会报错。

image-20220323091023519

    以前这块处理比较宽松,新的版本中DATE默认FAST格式(默认年月日),字符串转为date的时候,要求更严格,默认为1,不允许年月日字符串带时间。设置为0之后,允许带时间,可以支持to_date(‘2021-11-16 11:15:00’,‘yyyy-mm-dd’) 这种格式的语句

处理办法

修改DATETIME_FAST_RESTRICT参数值为0。语句如下:

   sp_set_para_value(1,‘DATETIME_FAST_RESTRICT’,0);

image-20220323091346641

总结

1、在老版本特别是2021年4月之前的版本,在进行版本升级时需要注意一下可能会遇到这个问题。

2、在从MySQL迁移到达梦的系统,也需要关注下这个参数,可以调整为0。

当然,如果业务系统使用过程中没有遇到问题,可以不用修改该参数。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java定时器(timer)是一种能够在特定时间间隔或者特定时间点执行某些任务的工具。它可以帮助我们实现很多有用的定时任务,如定时备份数据、定时发送邮件、定时清理缓存等等。 Java中的定时器主要有两种实现方式:一种是使用Timer类,另一种是使用ScheduledExecutorService接口。在本文中,我们主要介绍使用Timer类的实现方式。 使用Timer类创建定时器的步骤如下: 1. 创建一个Timer对象 ```java Timer timer = new Timer(); ``` 2. 创建一个TimerTask对象,用于执行定时任务 ```java TimerTask task = new TimerTask() { @Override public void run() { // 定时任务的具体实现 } }; ``` 3. 调用Timer对象的schedule()方法,设置定时任务的执行时间和执行频率 ```java timer.schedule(task, delay, period); ``` 其中,delay表示任务的延迟时间,单位为毫秒;period表示任务的执行周期,单位也为毫秒。如果period为0,则表示只执行一次任务。 完整的示例代码如下: ```java import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("定时任务执行了"); } public static void main(String[] args) { Timer timer = new Timer(); MyTimerTask task = new MyTimerTask(); timer.schedule(task, 1000, 2000); } } ``` 在上面的示例代码中,我们创建了一个MyTimerTask类,继承了TimerTask类,并实现了run()方法。在main()方法中,我们创建了一个Timer对象和一个MyTimerTask对象,并调用了schedule()方法,设置了任务的延迟时间为1000毫秒,执行周期为2000毫秒。当程序执行到schedule()方法时,定时器会在1000毫秒后开始执行定时任务,并且每隔2000毫秒执行一次。 需要注意的是,当定时任务执行时间超过执行周期时,定时器会等待当前任务执行完毕后立即执行下一次任务,而不是等待执行周期结束再执行。如果我们想要避免这种情况,可以考虑使用ScheduledExecutorService接口来实现定时任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值