【Databend】基础函数应用

文章目录

    • 数值函数
    • 字符串函数
    • 逻辑函数
    • JSON 函数
    • 聚合函数
    • 总结

数值函数

使用频率较高的数值函数如下:

  • abs(x):参数x的绝对值。
  • ceil(x):参数x向上取整。
  • floor(x):参数x向下取整。
  • rand([n]):生成 [0,1)的浮点数。
  • round(x,d):将参数x四舍五入到d小数位。
  • truncate(x,d):返回数字x,截断为d小数位。

使用示例:

select ceil(-1.23), floor(1.23), rand(), rand(1), round(0.123, 2), truncate(1.223, 1);
+-----------+-----------+------------------+------------------+---------------+-------------------+
|ceil(-1.23)|floor(1.23)|       rand()     |      rand(1)     |round(0.123, 2)|truncate(1.223, 1) |
+-----------+-----------+------------------+------------------+---------------+-------------------+
|   -1.0    |     1     |0.4990247756570755|0.7133693869548766|     0.12      |       1.2         |
+-----------+-----------+------------------+------------------+---------------+-------------------+ 

字符串函数

  • length(str):以字节为单位返回字符串的长度。
  • char_length(str):返回字符串str的长度,以字符为单位。多字节字符算作单个字符。这意味着对于包含五个2字节字符的字符串,length()返回10,而char_length()返回5。
  • lower(str):将所有字符更改为小写。
  • upper(str):将所有字符更改为大写。
  • left(str,len):返回字符串 str 中最左边的 len 字符,如果任何参数是 null,则返回 null。
  • right(str,len):返回字符串 str 中最右边的 len 字符,如果任何参数是 null,则返回 null。
select length('databend')      as len, char_length('databend') as char_len, lower('Databend')       as lower_char, upper('Databend')       as upper_char, left('Databend', 4)     as left_char, right('Databend', 4)    as right_char;
+-------+----------+------------+------------+-----------+------------+
|  len  | char_len | lower_char | upper_char | left_char | right_char |
+-------+----------+------------+------------+-----------+------------+
|   8   |    8     |  databend  |  DATABEND  |   Data    |    bend    |
+-------+----------+------------+------------+-----------+------------+  
  • trim([{both | leading | trailing} [remstr] from ] str):指定删除字符串的前导或尾随。如果省略删除字符串,则删除空格。
  • repeat(str, count):重复字符串 str count 次数。
  • lpad(str,len,padstr):左填充字符串 padstr 为长度为 len 个字符。如果str长于len,则返回值将缩短为len字符。
  • rpad(str,len,padstr):右填充字符串padstr为len字符的长度。如果str长于len,则返回值将缩短为len字符。
select trim(leading '?' from '???Databend???')  as leading_trim, trim(trailing '?' from '???Databend???') as trailing_trim, trim(both '?' from '???Databend???')     as both_trim, trim('  Databend  ')                     as spaces_trim, repeat('Databend', 2)                    as repeat_char, lpad('36363', 10, '0')                   as lpad_char, lpad('36363', 10, '?')                   as rpad_char;
+-------------+-------------+-----------+-------------+------------------+------------+------------+
|leading_trim |trailing_trim| both_trim | spaces_trim |   repeat_char    |  lpad_char |  rpad_char |
+-------------+-------------+-----------+-------------+------------------+------------+------------+
| Databend??? | ???Databend |  Databend |   Databend  | DatabendDatabend | 0000036363 | ?????36363 |
+-------------+-------------+-----------+-------------+------------------+------------+------------+
  • locate(substr, str, pos):返回 substr 子字符串在字符串 str 中从 pos 开始的第几个位置,pos 不写为0首次。
  • substring(str,pos,len):从 pos 位置开始,返回字符串 str 中 len 个长度字符,默认为最长长度。
  • inster(str,pos,len,new_str):子字符串从位置pos开始,len字符长被字符串newstr取代。
  • replace(str,from_str,to_str):将字符串from_str的所有出现都替换为字符串to_str。
select locate(' ', 'Databend Clound')                                     as pos_char, substring('Databend Clound', locate(' ', 'Databend Clound'))       as sub_char, insert('Databend Clound', length('Databend Clound'), 7, ' Server') as insert_char, replace('Databend Clound', 'Databend', 'Mysql')                    as replace_char1, replace('Databend Clound', 'Databend', '')                         as replace_char2, replace('www.mysql.com', 'mysql', '')                              as replace_char3;
+----------+----------+-----------------------+---------------+---------------+---------------+
| pos_char | sub_char |      insert_char      | replace_char1 | replace_char2 | replace_char3 |
+----------+----------+-----------------------+---------------+---------------+---------------+
|    9     |  Clound  | Databend Cloun Server | Mysqld Clound |   d Clound    |   www.l.com   |
+----------+----------+-----------------------+---------------+---------------+---------------+

从最后几列可以看出,Databend 和 Mysql 替换过程中始终不能完整替换,因此在使用过程中,多去测试看结果再实际应用。

另外,Databend 不支持 Mysql 中的 substring_index()函数,但是可以发散思维,比如上面的 sub_char 实现,还有以下方法实现:

select substring('Databend Clound',1,locate(' ','Databend Clound')-1) as sub_char;
+------------+
|  sub_char  |
+------------+
|  Databend  |
+------------+
  • concat(str1,str2,…):合并拼接字符串,返回varchar 数据类型值或 null 数据类型。
  • concat(separator,str1,str2,…):根据分隔符 separator 合并字符串,返回varchar 数据类型值或 null 数据类型。
select concat('data', 'bend')             as concat_char1, concat('data', 'bend', null)       as concat_char2, concat('data', 'bend', 1::varchar) as concat_char3, concat_ws('、', 'data', 'bend')     as concat_char4;
+--------------+--------------+---------------+--------------+
| concat_char1 | concat_char2 |  concat_char3 | concat_char4 |
+--------------+--------------+---------------+--------------+
|  databend    |      NULL    |   databend1   |  data、bend  |
+--------------+--------------+---------------+--------------+

逻辑函数

  • ifnull(expr1,expr2):如果不是NULL,则返回expr1。否则返回expr2。它们必须具有相同的数据类型。
  • greatest(values1,values2):从一组值中返回最大值。
  • least((values1,values2):从一组值中返回最小值。
  • if(cond1, expr1, [cond2, expr2, …], expr_else):如果cond1为TRUE,则返回expr1。否则,如果cond2为TRUE,则返回expr2,
  • coalesce(x,…):从左到右检查是否传递了 null 参数,并返回第一个非 null 参数。
select ifnull(null, 'a')                         as t1, greatest(2, 3)                            as t2, least(2, 3, 4)                            as t3, if(1 > 2, false, true)                    as t4, coalesce(null, 'Databend', 'Mysql', null) as t5
;

JSON 函数

对于这类函数,主要针对一些特殊的数据类型 variant ,可以前往【Databend】数据类型查看说明。

  • parse_json(str):将输入字符串解释为 json 文档,生成一个 variant 值。如果解析过程中发生错误,则返回NULL值。
  • object_keys(variant):返回一个数组,其中包含输入变体对象中的键列表。
  • get_path(variant, path_name):通过 path_name 从 variant 中提取值。如果其中一个参数是null则该值作为 variant 或 null 返回,path_name由字段名之前有句号(.)、冒号(:)或索引运算符([index])的串联组成。第一个字段名称不需要指定前导标识符。
  • get(variant,index|field_name):根据 index 或 field_name 获取具体值,未获得返回 null。
select parse_json('[-1, 12, 289, 2188, false]')                              as list_json, parse_json('{ "x" : "abc", "y" : false, "z": 10} ')                   as key_json, object_keys(parse_json('{"a": 1, "b": [1,2,3]}'))                     as get_keys, get_path(parse_json('{"k1":[0,1,2], "k2":{"k3":3,"k4":4}}'), 'k1[0]') as k1, get_path(parse_json('{"k1":[0,1,2], "k2":{"k3":3,"k4":4}}'), 'k2:k3') as k3, get_path(parse_json('{"k1":[0,1,2], "k2":{"k3":3,"k4":4}}'), 'k2.k4') as k4, get_path(parse_json('{"k1":[0,1,2], "k2":{"k3":3,"k4":4}}'), 'k2.k5') as k5, get(parse_json('[2.71, 3.14]'), 0)                                    as get_list_value, get(parse_json('{"aa":1, "aa":2, "aa":3}'), 'aa')                     as get_key_values, get(parse_json('{"aa":1, "aa":2, "aa":3}'), 'aa')                     as get_null
;
+------------------------+------------------------------+-----------+---+---+---+------+--------------+--------------+--------+
|       list_json        |            key_json          |  get_keys | k1| k3| k4|  k5  |get_list_value|get_key_values|get_null|
+------------------------+------------------------------+-----------+---+---+---+------+--------------+--------------+--------+
| [-1,12,289,2188,false] | {"x":"abc","y":false,"z":10} | ["a","b"] | 0 | 3 | 4 | NULL |      2.71    |       1      |  NULL  |
+------------------------+------------------------------+-----------+---+---+---+------+--------------+--------------+--------+
  • json_path_query_array(variant, path_name):获取指定 variant 值的 path_name 路径返回的所有 json 项,并将结果包装成数组。
  • json_path_query(variant, path_name):获取指定 variant 值的 path_name 路径返回的所有 json 项。
with t1 as(select 'laptop'                                                                                                           as name,'{"brand": "dell", "colors": ["black", "silver"], "price": 1200, "features": {"ram": "16gb", "storage": "512gb"}}' as detailsunion allselect 'smartphone'                                                                                                     as name,'{"brand": "apple", "colors": ["white", "black"], "price": 999, "features": {"ram": "4gb", "storage": "128gb"}}' as detailsunion allselect 'headphones'                                                                                                              as name,'{"brand": "sony", "colors": ["black", "blue", "red"], "price": 150, "features": {"battery": "20h", "bluetooth": "5.0"}}' as details)
select name, json_path_query_array(parse_json(details), '$.features.*') as all_features
from t1;
+-----------+---------------------+
|    name   |      all_features   |
+-----------+---------------------+
| Laptop    | ["16GB", "512GB"]   |
+-----------+---------------------+
| Smartphone| ["4GB", "128GB"]    |
+-----------+---------------------+
| Headphones| ["20h", "5.0"]      |
+-----------+---------------------+
with t1 as(select 'laptop'                                                                                                           as name,'{"brand": "dell", "colors": ["black", "silver"], "price": 1200, "features": {"ram": "16gb", "storage": "512gb"}}' as detailsunion allselect 'smartphone'                                                                                                     as name,'{"brand": "apple", "colors": ["white", "black"], "price": 999, "features": {"ram": "4gb", "storage": "128gb"}}' as detailsunion allselect 'headphones'                                                                                                              as name,'{"brand": "sony", "colors": ["black", "blue", "red"], "price": 150, "features": {"battery": "20h", "bluetooth": "5.0"}}' as details)
select name, json_path_query(parse_json(details), '$.features.*') as all_features
from t1;
+------------+--------------+
| name       | all_features |
+------------+--------------+
| Laptop     | "16GB"       |
| Laptop     | "512GB"      |
| Smartphone | "4GB"        |
| Smartphone | "128GB"      |
| Headphones | "20h"        |
| Headphones | "5.0"        |
+------------+--------------+

聚合函数

主要介绍常用的几种,如下:

  • avg(expr):返回expr的平均值。
  • max(expr):返回expr的最大值。
  • min(expr):返回expr的最小值。
  • sum(expr):返回expr的汇总值。
  • count([distinct] expr):返回expr的记录数。
  • median(expr):计算数字数据序列的中位数。
  • string_agg(expr [, delimiter]):将列的所有非null 值转换为 string,由分隔符分隔。
-- 数据准备
create table if not exists program_languages (id int,language_name varchar,score int
);
insert into program_languages (id, language_name,score)
values (1, 'python',80),(2, 'javascript',90),(3, 'java',75),(4, 'c#',95),(5, 'ruby',85);
-- 指标计算
select avg(score)                     as avg_score, max(score)                     as max_score, min(score)                     as min_score, median(score)                  as median_score, sum(score)                     as total_score, count(distinct language_name)  as language_cnt, string_agg(language_name, '、') as language_concat
from program_languages;
+-----------+-----------+-----------+--------------+-------------+--------------+-----------------------------------+
| avg_score | max_score | min_score | median_score | total_score | language_cnt |         language_concat           |
+-----------+-----------+-----------+--------------+-------------+--------------+-----------------------------------+
|    85     |     95    |      75   |       85     |     425     |       5      | python、javascript、java、c#、ruby |
+-----------+-----------+-----------+--------------+-------------+--------------+-----------------------------------+

以上这些聚合函数 null 值都不计算在内。

聚合函数 Databend 比 Mysql 多了一个 median() 可用于更好地计算中位数,其实还有一些其他聚合函数,有兴趣的可以自己扩展。

总结

Databend 作为新一代云原生数据仓库,提供了许多多样化的函数,函数与 Mysql 相比,并无较大差异,我们只要掌握基础常用哪些函数,基本上可以解决工作中大部分问题。

参考资料:

  • Databend Functions:https://docs.databend.com/sql/sql-functions/
  • Mysql 常用函数和基础查询:https://blog.csdn.net/weixin_50357986/article/details/134378858

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充:RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充:new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景: 在学习 RabbitMQ 的使用时, 经常会遇到不同的队列声明方式,有的…

酚醛胶面建筑模板 — 广西厂家直销,质保可靠

在现代建筑行业中,选择高质量的建筑板材对于确保施工质量和工程安全至关重要。广西厂家直销的酚醛胶面建筑板,以其卓越的质量和可靠的质保,成为了建筑行业的优选材料。 产品特性 卓越的耐候性:我们的酚醛胶面建筑板采用高品质酚醛…

图文看懂Android的Matrix原理

Matrix结构 在Android开发中,矩阵是一个非常强大且有趣的工具。位于图形库中,android.graphics.Matrix 是一个 33 的 float 矩阵,其主要作用是坐标变换。 它的结构大概是这样的: 其中每个位置的数值作用和其名称所代表的的含义是…

【写作】短篇《相遇与相守》

文章目录 前言背景角色故事梗概 第一章 缘分的邂逅第二章 心动的瞬间第三章 甜蜜的日子第四章 误会与和解第五章 共度风雨 前言 背景 时代背景 现代,一个充满忙碌和喧嚣的都市。这个都市是许多年轻人追求梦想和奋斗的地方,但也是许多人渴望寻找真挚感情…

Vue-18、Vue人员列表排序

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>列表排序</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script…

Linux中DCHP与时间同步

目录 一、DHCP &#xff08;一&#xff09;工作原理 1.获取 2.续约 &#xff08;二&#xff09;分配方式 &#xff08;三&#xff09;服务器配置 1.随机地址分配 2.固定地址分配 二、时间同步 &#xff08;一&#xff09;ntpdate &#xff08;二&#xff09;chrony …

window-nginx注册服务(nginx-1.24.0.zip)

window-nginx注册服务(nginx-1.24.0.zip) 1、下载当前windows版nginx的稳定版本。 https://nginx.org/en/download.html 2、解压到指定目录中&#xff0c;这里解压到D盘根目录&#xff0c;D:\nginx-1.24.0 3、管理员打开命令行&#xff0c;可先进行相关操作&#xff0c;看一下n…

掌握Adams许可分析数据可视化技巧,轻松实现高效宣传

在这个信息爆炸的时代&#xff0c;数据可视化已经成为宣传和营销的重要工具。Adams许可分析数据可视化技巧以其独特的优势&#xff0c;帮助企业和个人更好地理解数据&#xff0c;呈现信息&#xff0c;吸引受众。本文将带您了解Adams许可分析数据可视化技巧&#xff0c;并探讨如…

create_metrology_model

set_system (border_shape_models, false) read_image (Image, D:/图像文件/调试图片/调试图片/cam220230726182355309.bmp) * draw_rectangle2 (3600, Row4, Column5, Phi3, Length12, Length22) Rect1Row:1010.37 Rect1Col:1189.15 phi:-0.188 RectLength1:450.531 RectLengt…

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…

Docker-阿里云镜像配置

1、创建文件 vi /etc/docker/daemon.json 刚安装的docker一般没有docker/daemon.json这些&#xff0c;需要自己新建 2、文件中添加内容 { "registry-mirrors": ["https://m3e4jmm0.mirror.aliyuncs.com"] } 3、重启 重新加载配置&#xff1a; systemct…

Google的Ndk-Sample学习笔记之一(hello-jniCallback)

前言: 近段时间因为项目的需求,需要使用JNI,所以下载了Google的Ndk-Sample学习下,准备记录 下来,留给后期自己查看 问题点一:JNI_OnLoad方法必须返回JNI的版本 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {JNIEnv *env;memset(&g_ctx, 0, sizeof(g_…

ABAP CDS 常用语法

文章目录 1.什么是abap cdsadap cds的优点 2.常用cds语法常用函数一 数值函数1.绝对值2. 最小整数不小于arg的值3.两个参数相除4.两个数相除切保留小数位5.最小整数不大于arg的值6.取除数的余数 二 字符串函数1.拼接字符2.替换字符3.截取字符串 三 常用的分支语句1.CASE 表达式…

亚马逊API:快速查询全球商品数据的技巧!

了解亚马逊API的限制和要求&#xff1a;在使用亚马逊API之前&#xff0c;您需要了解其限制和要求&#xff0c;例如请求频率限制、认证要求等。确保您遵循了API的使用条款&#xff0c;以避免不必要的麻烦。使用合适的亚马逊API服务&#xff1a;亚马逊提供了多个API服务&#xff…

Linux的SSH密钥认证快捷配置

本文适用&#xff1a;rhel5-9系列&#xff0c;同类系统(CentOS,AlmaLinux,RockyLinux等)、debian系(ubuntu)等也可参照 文档形成时期&#xff1a;2012-2024年 因系统版本不同&#xff0c;配置应略有差异&#xff0c;本文没有在细节上区分&#xff0c;但实践中发现均可配置成功 …

Linux实用命令

文章目录 一.系统与设置命令1. Linux的用户与用户组2.当前用户的详细信息 id3.提高普通用户的权限sudo4.实时显示进程的信息 top5.查看进程信息ps6.杀死进程kill7.关机重启8.显示当前登陆系统的用户who9.校正服务器时间,时区 timedatectl10.清屏命令clear 二.目录管理1.ls列出目…

Atlassian版本选择趋势是上云还是本地部署?全面分析两个版本的特性

近日&#xff0c;龙智联合Atlassian举办的DevSecOps研讨会年终专场”趋势展望与实战探讨&#xff1a;如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队&#xff0c;以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0…

flutter封装dio请求库,让我们做前端的同学可以轻松上手使用,仿照axios的使用封装

dio是一个非常强大的网络请求库&#xff0c;可以支持发送各种网络请求&#xff0c;就像axios一样灵活强大&#xff0c;但是官网没有做一个demo示例&#xff0c;所以前端同学使用起来还是有点费劲&#xff0c;所以就想在这里封装一下&#xff0c;方便前端同学使用。 官网地址&a…

uniapp开发安卓应用微信开放平台创建应用如何获取签名

微信开放平台创建应用时需要应用的签名 比如我们开发了一个应用叫 “滴滴拉屎” 包名&#xff1a;uni.DIDILASHI #mermaid-svg-BUKbltDr30J93dUs {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BUKbltDr30J93dUs .…

直播带货2024:洗牌、阵痛和暗流涌动

文 | 螳螂观察 作者 | 青月 一天前&#xff0c;大学生齐夏根本不会在直播间购买《额尔古纳河右岸》这种书籍。 她是喜欢看小说&#xff0c;但只钟爱悬疑无限流题材&#xff0c;至于《额尔古纳河右岸》这种讲述一个弱小民族顽强的抗争和优美的爱情的长篇小说&#xff0c;用齐…