kingbaseES(人大金仓)数据库语法和常用函数 以及 踩坑记录

这篇博客记录了使用Kingbase数据库时遇到的一些问题和解决方案,包括空值替换使用nullif函数的反常规用法,关联查询必须指定模式名称,分页插件配置及计数统计的正确写法。作者分享了在实际操作中遇到的困扰和最终的解决办法。
摘要由CSDN通过智能技术生成

前言

最近公司弄了个新项目,数据库指定使用kingbase数据库

刚开始一看这名字都不知道这是啥数据库,后来百度一搜,看到中文名字就知道了。

虽然没用过,但那几个国产数据库也听说过

这不,刚开始用,语法都不熟悉,有的百度找,有的自己试,用过的语法和函数在这里记录一下

空值替换函数

nullif(替换值,原始值)

意思是如果原始值为null,则输出替换值

(跟其他数据库的函数正好反过来了,其他ifnull、nvl、coalesce这些都是第一个参数是原始值,第二个参数是替换值)

本来以为是nullif函数,后来试了几次发现有问题,有时候正常有时候不正常。这数据库,一言难尽。

只能用笨方法了,case判断

SELECT case when max(SORT) is null then 0 else max(SORT) end sort FROM TABLE

关联查询

已经设置好了当前模式的情况下

关联查询语法跟正常SQL没啥区别,但是有一点很难受,关联其他表查询的时候,必须在关联的表前面加上当前模式名称,不加就报错。单表查询就不用加模式名称

不加模式名称

加了之后

分组字符串连接函数

group_concat(需要逗号连接的字段)

跟mysql中的函数名一样,配合group by使用,把多行值用逗号连接显示

分页插件问题

配置类里面已经像下面这样配置好了分页插件和它使用的数据库类型 

但是使用的时候报错 “使用 PageHelper 分页插件时,必须设置 helper 属性”

想了一下分页语法跟postgresql一样,就在使用的时候加了个指定数据库为postgresql

就能正常使用了,如下

 

count计数问题

比如我现在想统计一个表中按时间字段分组,每天的type为0和为1的记录数

错误写法1:

select to_char(time, 'yyyy-MM-dd'),
       count(type = 0) inCount,
       count(type = 1) outCount
from t_access_record
group by to_char(time, 'yyyy-MM-dd')

错误写法2:

select to_char(time, 'yyyy-MM-dd'),
       count(case when type = 0 then 1 else 0 end) inCount,
       count(case when type = 1 then 1 else 0 end) outCount
from t_access_record
group by to_char(time, 'yyyy-MM-dd')

 上面两种写法结果都是总条数,并没有按括号中的条件统计

正确写法:

select to_char(time, 'yyyy-MM-dd'),
       sum(case when type = 0 then 1 else 0 end) inCount,
       sum(case when type = 1 then 1 else 0 end) outCount
from t_access_record
group by to_char(time, 'yyyy-MM-dd')

 

目前发现的只有这些,后面有问题继续补充……

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿演

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值