GBase+8s_NVL函数支持时间格式问题详解_第1页
GBase+8s_NVL函数支持时间格式问题详解_第2页
GBase+8s_NVL函数支持时间格式问题详解_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GBase 8s_NVL函数支持时间格式问题详解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 no

2、t 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.测试表结构col1col2col3col4col5col612312019-10-10 12:12:122019-10-12 12:23:12b.测试过程:l 测试SQLSQL1:sel

3、ect col6-col5 from table1;(测试时间相减输出结果类型)SQL2:select nvl(col6-col5,col5-col5) from table1; (测试NVL函数输入两个日期相减类型)SQL3:select nvl(col6-col5,0) from table1; (仿用户场景测试)l 测试结果:SQL1: GBase 8s正常执行,但返回interval型结果,以天-时-分-秒形式,例如1 00:12:00;SQL2: GBase 8s 正常执行,但返回interval型结果。SQL3:GBase 8s NVL函数执行失败,输入参数第一个为interval

4、型,第二个参数为数值型,报语法错误:“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型情况下,如果数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论