主要内容:

1概述

在很多应用场景中,经常会按日期对数据进行存储和查询,也会对日期进行一些必要的运算,如求日期的差值等,本文介绍GBase 8s中NVL函数对日期差值的支持,有一定参考价值。

2问题现状

2.1现状描述

在某国产化替代项目中出现如下场景:NVL函数需要支持时间相减, GBase 8s中时间相减结果则是interval型,包含天-时-分-秒(示例:1 5:23:12),在这种场景下,GBase 8s会因为NVL函数两个输入参数不一致,格式无法转换而报错“SQL错误【ErrorCode:-1260】【SQLState:IX000】:It is not possible to convert between the specified types.”。如下所示:

源SQL:

select ceil(60*24*nvl(t.flt_actual_time-t.flt_scheme_time,0)) as delay_time from view_m_dep_executed_flt t;

2.2问题分析

在GBase 8s中执行SQL语句进行测试分析,过程如下。

a.测试表结构

col1col2col3col4col5col6

12312019-10-10 12:12:122019-10-12 12:23:12

b.测试过程:

测试SQL

SQL1:select col6-col5 from table1;(测试时间相减输出结果类型)

SQL2:select nvl(col6-col5,col5-col5) from table1; (测试NVL函数输入两个日期相减类型)

SQL3:select nvl(col6-col5,0) from table1; (仿用户场景测试)

测试结果:

SQL1: GBase 8s正常执行,但返回interval型结果,以天-时-分-秒形式,例如1 00:12:00;

SQL2: GBase 8s 正常执行,但返回interval型结果。

SQL3:GBase 8s NVL函数执行失败,输入参数第一个为interval型,第二个参数为数值型,报语法错误:“SQL错误【ErrorCode:-1260】【SQLState:IX000】:It is not possible to convert between the specified types.”

2.3问题总结

经分析测试,造成现状描述中问题的原因是:GBase 8s数据NVL函数两个输入参数需类型一致或能进行隐式类型转换,才可执行成功,但目前日期相减结果为interval型,无法与数值型顺利相互转换,所以报格式转换错误。

GBase 8s数据库会加强兼容性方面的功能支持,以支持上述场景,降低从主流数据库迁移到GBase 8s数据库的适配难度,提供更强大的兼容能力。

3解决方案

由问题分析可知,解决方案如下:

GBase 8s NVL函数在两个参数为interval时间格式和数值型参数情况下,支持隐式类型转换,函数可顺利执行,以达到与主流数据库兼容的目的。

具体如下:

在第一个参数是interval型,第二个参数是数值型情况下,需要将interval转换成float型,默认单位为天;

在第一个参数是数值型,第二个参数是interval型情况下,如果数值型不为null,则直接返回该数值型,否则,将interval转换成以天为单位的float型,作为函数返回值。

java nvl函数_GBase 8s_NVL函数支持时间格式问题详解 PDF 下载相关推荐

  1. C语言标准库里的获取时间函数及时间格式转换详解

    C语言标准库里的获取时间函数及时间格式转换详解 头文件: #include <time.h> 相关库函数(截图摘自:https://www.runoob.com/cprogramming/ ...

  2. Java基础篇(04):日期与时间API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...

  3. java定义日期格式_Java时间格式定义详解

    概述 自己在使用Java日志格式的时候,发现不好定义.所以本篇文章的主要目的是收集一些常用的日志格式,解说每个字段代表的意思以及扩充部分Java常用的时间类. 重要参考文档 文章进度2018515 完 ...

  4. go 时间格式风格详解

    为什么80%的码农都做不了架构师?>>>    一段代码 这里有一段代码 play 更能解说 layout. 可以看出, go 自动识别并转换 time 字符串是完全可能的. tim ...

  5. java基础与案例开发详解 pdf下载_Java基础与案例开发详解(张孝祥) pdf_IT教程网...

    资源名称:Java基础与案例开发详解(张孝祥) pdf 第1.2和3章介绍Java环境的安装配置,Java程序的开发过程和Java语言的基础语法. 第4章介绍数组和常用算法的相关知识. 第5章和6章介 ...

  6. java的日期操作_java中对时间的操作详解

    代码演示: //数据库中去的日期 Date s = list.get(0).getSdate(); System.out.println(s);// Tue Apr 28 00:00:00 CST 2 ...

  7. C 语言中获取系统时间的函数,C/C++如何获取当前系统时间的实例详解

    C/C++如何获取当前系统时间的实例详解 C库中与系统时间相关的函数定义在头文件中, C++定义在头文件中. 一.time(time_t*)函数 函数定义如下: time_t time (time_t ...

  8. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  9. php判断参数_php检查函数必传参数是否存在的实例详解

    php检查函数必传参数是否存在的实例详解 在php实际编程中,接口经常会接收到前端传来的参数,其中有些参数不是必传的,有些参数是必传的,如何"检查函数必传参数是否存在"呢?为了解决 ...

最新文章

  1. Android应用插件式开发解决方法[转]
  2. 从零开始入门 K8s | etcd 性能优化实践
  3. javascript创建对象 1
  4. 【转】什么是 Azure 资源管理器
  5. FusionCharts 的XML标签属性
  6. linux系统下安装GCC编译器
  7. BLM战略规划的核心是业务模式创新
  8. 【neutron】mitaka版本openstack网络之open vSwitch
  9. python打开ie浏览器_python-IE浏览器调用
  10. 忆黄霑(文/林青霞)
  11. VSCode、notepa++列选择(垂直选中)快捷键方法
  12. redux和react-redux
  13. C语言 怎样定义指针变量
  14. 利用 Cocos2dx-3.0 新物理特性模拟弹珠迷宫
  15. SpringBoot实现定时任务的三种方式,总有一款适合你!
  16. 思维导图 | XMind 8 Update 8 Pro 自动破解版
  17. JOS学习笔记(三)
  18. 用什么软件画流程图好?
  19. 机器学习项目实战—吸烟与人体疾病关系预测
  20. 《程序员之禅》一一1.2 什么是禅

热门文章

  1. Microsoft Viva Learning(一)--该不该购买?
  2. 南瓜芽童装加盟让童装消费也疯狂
  3. 用BingGPT写一首勉励自己的诗
  4. 解决T2A W2A A2W的报错error C2065 lpw 未声明的标识符
  5. Unity 监听键盘按键
  6. Springboot毕设项目儿童手表管理系29x7n(java+VUE+Mybatis+Maven+Mysql)
  7. 红光光浴每天照,健康美丽两不误。
  8. FLIP 动画实现多维网格的过渡
  9. MGR中gtid_executed不连续的问题分析
  10. ns3统计时延和丢包率_端到端高丢包率小区优化思路