计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive
本文导读

字符串函数和运算符

更新时间:2024-12-31 GMT+08:00

字符串运算符

||表示字符连接

SELECT 'he'||'llo'; --hello

字符串函数

这些函数假定输入字符串包含有效的UTF-8编码的Unicode代码点。不会显式检查UTF-8数据是否有效,对于无效的UTF-8数据,函数可能会返回错误的结果。可以使用from_utf8来更正无效的UTF-8数据。

此外,这些函数对Unicode代码点进行运算,而不是对用户可见的字符(或字形群集)进行运算。某些语言将多个代码点组合成单个用户感观字符(这是语言书写系统的基本单位),但是函数会将每个代码点视为单独的单位。

lower和upper函数不执行某些语言所需的区域设置相关、上下文相关或一对多映射。

  • chr(n) → varchar

    描述:返回Unicode编码值为n的字符值。

    select chr(100); --d
  • char_length(string) → bigint

    参考length(string)

  • character_length(string) → bigint

    参考length(string)

  • codepoint(string) → integer

    描述:返回单个字符对应的Unicode编码。

    select codepoint('d'); --100
  • concat(string1, string2) → varchar

    描述:字符串连接。

    select concat('hello','world'); -- helloworld
  • concat_ws(string0, string1, ..., stringN) → varchar

    描述:将string1、string2、...,stringN,以string0作为分隔符串联成一个字符串。如果string0为null,则返回值为null。分隔符后的参数如果是NULL值,将会被跳过。

    select concat_ws(',','hello','world'); -- hello,world
    select concat_ws(NULL,'def'); --NULL
    select concat_ws(',','hello',NULL,'world'); -- hello,world
    select concat_ws(',','hello','','world'); -- hello,,world
  • concat_ws(string0, array(varchar)) → varchar

    描述:将数组中的元素以string0为分隔符进行串联。如果string0为null,则返回值为null。数组中的任何null值都将被跳过。

    select concat_ws(NULL,ARRAY['abc']);--NULL
    select concat_ws(',',ARRAY['abc',NULL,NULL,'xyz']); -- abc,xyz
    select concat_ws(',',ARRAY['hello','world']); -- hello,world
  • decode(binary bin, string charset) →varchar

    描述:根据给定的字符集将第一个参数编码为字符串,支持的字符集包括('UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'),当第一个参数为null,将返回null。

    select decode(X'70 61 6e 64 61','UTF-8');
     _col0 
    -------
     panda 
    (1 row)
     
    select decode(X'00 70 00 61 00 6e 00 64 00 61','UTF-16BE');
     _col0 
    -------
     panda 
    (1 row)
  • encode(string str, string charset) →binary

    描述:字符串按照给定的字符集进行编码。

    select encode('panda','UTF-8');
         _col0      
    ----------------
     70 61 6e 64 61 
    (1 row)
  • find_in_set (string str, string strList) →int

    描述:返回str在逗号分隔的strList中第一次出现的位置。当有参数为null时,返回值也为null。

    select find_in_set('ab', 'abc,b,ab,c,def'); -- 3
  • format_number(number x, int d) →string

    描述:将数字x格式化为'#,###,###.##',保留d位小数,以字符串的形式返回结果。

    select format_number(541211.212,2); -- 541,211.21
  • format(format,args...) → varchar

    描述:参见Format

  • locate(string substr, string str, int pos]) →int

    描述:返回子串在字符串的第pos位后第一次出现的位置。没有满足条件的返回0。

    select locate('aaa','bbaaaaa',6);-- 0
    select locate('aaa','bbaaaaa',1);-- 3
    select locate('aaa','bbaaaaa',4);-- 4
  • length(string) → bigint

    描述:返回字符串的长度。

    select length('hello');-- 5
  • levenshtein_distance(string1, string2) → bigint

    描述:计算string1和string2的Levenshtein距离,即将string转为string2所需要的单字符编辑(包括插入、删除或替换)最少次数。

    select levenshtein_distance('helo word','hello,world'); -- 3
  • hamming_distance(string1, string2) → bigint

    描述:返回字符串1和字符串2的汉明距离,即对应位置字符不同的数量。 请注意,两个字符串的长度必须相同。

    select hamming_distance('abcde','edcba');-- 4
  • instr(string,substring) → bigint
    描述:查找substring 在string中首次出现的位置。
    select instr('abcde', 'cd');--3
  • levenshtein(string1, string2) → bigint 参考levenshtein_distance(string1, string2)
  • levenshtein_distance(string1, string2) → bigint

    描述:返回字符串1和字符串2的Levenshtein编辑距离,即将字符串1更改为字符串2所需的最小单字符编辑(插入,删除或替换)次数。

    select levenshtein_distance('apple','epplea');-- 2
  • lower(string) → varchar

    描述:将字符转换为小写。

    select lower('HELLo!');-- hello!
  • lcase(string A) → varchar

    描述:同lower(string)。

  • ltrim(string) → varchar

    描述:去掉字符串开头的空格。

    select ltrim('   hello');-- hello
  • lpad(string, size, padstring) → varchar

    描述:右填充字符串以使用padstring调整字符大小。如果size小于字符串的长度,则结果将被截断为size个字符。大小不能为负,并且填充字符串必须为非空。

    select lpad('myk',5,'fish'); -- domyk
  • luhn_check(string) → boolean

    描述:根据Luhn算法测试数字字符串是否有效。

    这种校验和函数,也称为模10,广泛应用于信用卡号码和政府身份证号码,以区分有效号码和键入错误、错误的号码。

    select luhn_check('79927398713'); -- true
    select luhn_check('79927398714'); -- false
  • octet_length(string str) → int

    描述:返回用于保存UTF-8编码的字符串str的字节数。

    select octet_length('query');--5
  • parse_url(string urlString, string partToExtract [, string keyToExtract]) →string

    描述:返回URL的指定部分。partToExtract参数有效值包括:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO。keyToExtract为可选参数,用于选取QUERY中的key对应的值。

    select parse_url('https://www.example.com/index.html','HOST');
      _col0   
    ----------
     www.example.com
    (1 row)
     
    -- 查询URL中QUERY部分service对应的值
    select parse_url('https://www.example.com/query/index.html?name=panda','QUERY','name');
     _col0 
    -------
     panda 
    (1 row)
  • position(substring IN string) →bigint

    描述:返回子串在父串中第一次出现的位置

    select position('ab' in 'sssababa');-- 4
  • quote(String text) → string

    描述:返回单引号包裹的字符串。不支持含单引号的字符串。

    select quote('DONT');-- 'DONT'
    select quote(NULL);-- NULL
  • repeat2(string str, int n) → string

    描述:返回str重复n次获得的字符串。

    select repeat2('abc',4);
        _col0     
    --------------
     abcabcabcabc 
    (1 row)
  • replace(string, ‘a’) → varchar

    描述:去掉字符串中的a字符。

    select replace('hello','e');-- hllo
  • replace(string, ‘a’, ‘b’) → varchar

    描述:把字符串中所有的a字符 替换为b。

    select replace('hello','l','m');-- hemmo
  • reverse(string) → varchar

    描述:字符串倒序。

    select reverse('hello');-- olleh
  • rpad(string, size, padstring) → varchar

    描述:右填充字符串以使用padstring调整字符大小。如果size小于字符串的长度,则结果将被截断为size个字符。大小不能为负,并且填充字符串必须为非空。

    select rpad('myk',5,'fish'); -- mykdo
  • rtrim(string) → varchar

    描述:去掉字符串尾部的空格。

    select rtrim('hello world!   ');-- hello world!
  • space(int n) → varchar

    描述:返回n个空格。

    select space(4);
     _col0 
    -------
           
    (1 row)
     
    select length(space(4));
     _col0 
    -------
         4 
    (1 row)
  • split(string, delimiter) → array

    描述:将字符串按限定符(delimiter)分隔为一个array。

    select split('a:b:c:d',':');-- [a, b, c, d]
  • split(string, delimiter, limit) → array

    描述:将字符串按delimiter分割为一个array,元素个数为limit。最后一个元素包含了最后一个字符串后面所有的字符。Limit 必须是个数字。

    select split('a:b:c:d',':',2);-- [a, b:c:d]
    select split('a:b:c:d',':',4);-- [a, b, c, d]
  • split_part(string, delimiter, index) → varchar

    描述:将字符串按delimiter分隔为一个array,并取出索引值为index的元素。index从1开始,如果index超过了数组长度,则返回null。

    select split_part('a:b:c:d',':',2); -- b
    select split_part('a:b:c:d',':',5); -- NULL
  • split_to_map (string, entryDelimiter, keyValueDelimiter) → map<varchar, varchar>

    描述:将字符串按entryDelimiter分割为Map的键值对,而每个键值对又按照keyValueDelimiter来区分Key和Value。

    select split_to_map('li:18,wang:17',',',':');--{wang=17, li=18}
  • split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map(varchar, array(varchar)

    描述:将字符串按照entryDelimiter和keyValueDelimiter分割,返回一个map,每个key对应一个类型为array的value。其中,entryDelimiter将字符串分割为键值对,keyValueDelimiter将键值对分割为Key和Value。

    select split_to_multimap('li:18,wang:17,li:19,wang:18',',',':');--{wang=[17, 18], li=[18, 19]}
  • strpos(string, substring) → bigint

    描述:返回字符串中第一次出现substring的位置。从1开始,如果未找到,返回0。举例:

    select strpos('hello world!','l'); --3
    select strpos('hello world!','da'); --0
  • str_to_map() 参考split_to_map()
  • substr(string, start) → varchar

    描述:从start位置开始截取字符串。

    select substr('hello world',3);-- llo world
  • substr(string, start, length) → varchar

    描述:从start位置开始截取字符串,截取的长度为length。

    一般用于截取时间戳格式。

    Select substr('2019-03-10 10:00:00',1,10); --截取到日 2019-03-10
    Select substr('2019-03-10 10:00:00',1,7); --截取到月 2019-03
  • substring(string, start) → varchar

    参考substr(string, start)

  • substring_index(string A, string delim, int count) → varchar

    描述:当count为正数时,返回从左边开始计数的第count个分隔符delim左边的所有内容。当count为负数时,返回从右边开始计数的第count个分隔符delim右侧的所有内容。

    select substring_index('one.two.three','.',2);
          _col0      
    -----------------
     one.two 
    (1 row)
     
    select substring_index('one.two.three','.',-2);
          _col0      
    -----------------
     two.three 
    (1 row)
     
    select substring_index('one.two.three','.',0);
     _col0 
    -------
     NULL  
    (1 row)
  • soundex(string A) →varchar

    描述:SOUNDEX返回由四个字符组成的代码(SOUNDEX)以评估两个字符串在发音时的相似性。规则如下:

    表1 字符对应规则

    字符

    对应数字

    a、e、h、i、o、u、w、y

    0

    b、f、p、v

    1

    c、g、j、k、q、s、x、z

    2

    d、t

    3

    l

    4

    m、n

    5

    r

    6

    • 提取字符串的首字母作为soundex的第一个值。
    • 按照上面的字母对应规则,将后面的字母逐个替换为数字。如果有连续的相等的数字,只保留一个,其余的都删除掉,并去除所有的0。
    • 如果结果超过4位,取前四位。如果结果不足4位向后补0。
      select soundex('Miller');
       _col0 
      -------
       M460  
      (1 row)
  • translate(string|char|varchar input, string|char|varchar from, string|char|varchar to) →varchar

    描述:对于input字符串,将其中的参数from指代字符串替换为参数to指代的字符串。三个参数有一个为NULL,则结果返回NULL。

    select translate('aabbcc','bb','BB');
     _col0  
    --------
     aaBBcc 
    (1 row)
  • trim(string) → varchar

    描述:去掉字符串首尾的空格。

    select trim('  hello world!  ');-- hello world!
  • btrim(String str1,String str2) → varchar

    描述:从str1首尾去掉str2中包含的所有字符。

    select btrim('hello','hlo');-- e
  • upper(string) → varchar

    描述:将字符串转为大写。

    select upper('heLLo');-- HELLO
  • ucase(string A) → varchar

    描述:同upper(string)。

  • base64decode(STRING str)

    描述:对字符串进行base64反编码。

    SELECT to_base64(CAST('hello world' as varbinary));-- aGVsbG8gd29ybGQ=
    select base64decode('aGVsbG8gd29ybGQ=');-- hello world
  • jaro_distance(STRING str1, STRING str2)

    描述:比较两个字符串的相似度。

    select JARO_DISTANCE('hello', 'hell');-- 0.9333333333333332 
  • FNV_HASH(type v)

    描述:计算字符串的hash值。

    select FNV_HASH('hello');-- -6615550055289275125 
  • word_stem(word) → varchar

    描述:返回英语单词的词干。

    select word_stem('greating');-- great
  • word_stem(word, lang) → varchar

    描述:返回指定语种单词中的词干。

    select word_stem('ultramoderne','fr');-- ultramodern
  • translate(source, from, to) → varchar

    描述:通过将源字符串中找到的字符替换为目标字符串中的相应字符来返回翻译后的源字符串。如果from字符串包含重复项,则仅使用第一个。如果源字符在from字符串中不存在,则将复制源字符而不进行翻译。如果在from字符串中匹配字符的索引超出了to字符串的长度,则将从结果字符串中省略源字符。

    SELECT translate('abcd', '', ''); -- 'abcd'
    SELECT translate('abcd', 'a', 'z'); -- 'zbcd'
    SELECT translate('abcda', 'a', 'z'); -- 'zbcdz'
    SELECT translate('Palhoça', 'ç','c'); -- 'Palhoca'
    SELECT translate('abcd', 'a', ''); -- 'bcd'
    SELECT translate('abcd', 'a', 'zy'); -- 'zbcd'
    SELECT translate('abcd', 'ac', 'z'); -- 'zbd'
    SELECT translate('abcd', 'aac', 'zq'); -- 'zbd'
Unicode函数
  • normalize(string) → varchar

    描述:返回NFC形式的标准字符串。

    select normalize('e');
     _col0 
    -------
     e     
    (1 row)
  • normalize(string, form) → varchar

    描述:Unicode允许你用不同的字节来写相同的字符,例如é和é,第一个是由0xC3 0xA9这两个字节组成的,第二个是由0x65 0xCC 0x81这三个字节组成的。

    normalize()将根据参数form给定的Unicode规范化形式 (包括NFC、NFD、NFKC、NFKD)返回标准字符串,如未指定参数,默认使用NFC。

    select to_utf8('é');
     _col0 
    -------
     c3 a9 
    (1 row)
     
    select to_utf8('é');
      _col0   
    ----------
     65 cc 81 
    (1 row)
     
    select normalize('é',NFC)=normalize('é',NFC);
     _col0 
    -------
     true  
    (1 row)
  • to_utf8(string) → varbinary

    将字符串编码为utf8格式字符串。

    select to_utf8('panda');
         _col0      
    ----------------
     70 61 6e 64 61 
    (1 row)
  • from_utf8(binary) → varchar

    描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被Unicode字符U+FFFD替换。

    select from_utf8(X'70 61 6e 64 61');
     _col0 
    -------
     panda 
    (1 row)
  • from_utf8(binary, replace) → varchar

    描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被参数replace替换。参数replace必须为单个字符或空(以免无效字符被移除)。

    select from_utf8(X'70 61 6e 64 61 b1','!');
     _col0  
    --------
     panda! 
    (1 row)

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容