测试环境:
- Vertica: Vertica Analytic Database v11.1.1-22
- Wutong DB: V5.4.10.0
## 1. ASCII
功能说明:
ASCII(expression)
函数返回表达式中第一个字符的 ASCII 值。通常用于将字符转换为对应的 ASCII 编码。测试语句:
select small_brand from bdcis.tb_cis_user_induser_day where ASCII(SUBSTR(small_brand,1,1))=76 limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:(与 Vertica 精度不同)
## 2. bit_length
功能说明:
bit_length(expression)
函数返回表达式的位长度。通常用于计算二进制数据或字符串的位数。测试语句:
select bit_length('abc'::varbinary);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:(与 Vertica 精度不同)
24
Wutong DB 输出结果:
在梧桐数据库输出错误,如下所示:
type "varbinary" does not exist
Wutong DB 5.4 和 Wutong DB 6 解决方案:
在 Wutong DB 中将导致错误,因为 Wutong DB 不支持
varbinary
。取而代之的是,您可以使用bytea
类型来表示二进制数据,并使用以下写法:正确的写法:
SELECT bit_length('abc'::bytea);
或者,您可以使用
encode()
函数将字符串转换为十六进制格式,再将其作为bytea
处理:SELECT bit_length(encode('abc'::bytea, 'hex'));
## 3. bitcount
功能说明:
bitcount(expression)
函数返回表达式中为 1 的位的数量。该函数常用于二进制数据分析。测试语句:
select bitcount(hex_to_binary('0x10'));
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:(与 Vertica 精度不同)
1
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function hex_to_binary(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 5.4 和 Wutong DB 6 并不直接支持
bitcount()
,可以通过手动实现:SELECT LENGTH(REGEXP_REPLACE(TO_HEX('0x10'), '0', '', 'g'));
## 4. bitstring_to_binary
功能说明:
bitstring_to_binary(bitstring)
函数将二进制字符串转换为实际的二进制数据。适用于处理二进制数据时的格式转换。测试语句:
select bitstring_to_binary('0110000101100010');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
ab
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function bitstring_to_binary(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 中没有直接的替代函数,可以使用以下方式手动转换:
SELECT encode(decode('01100001', 'hex'), 'escape');
## 5. btrim
功能说明:
btrim(expression, characters)
函数从表达式的两端移除指定的字符。常用于清理字符串中的多余字符。测试语句:
select substr(btrim((bb.REG_NBR)::varchar(32)), 1, 20) aa -- 身份证号码 from gs_test.test_function_btrim bb -- 用户日表 order by aa desc;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:(与 Vertica 精度不同)
## 6. character_length
功能说明:
character_length(expression)
函数返回字符串的字符长度。它通常用于计算字符串的长度,不包括尾随空格。测试语句:
select character_length('1234 '::char(10) using octets);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
4
Wutong DB 输出结果:
在梧桐数据库输出错误,如下所示:
syntax error at or near "using"
Wutong DB 5.4 解决办法:
Wutong DB 5.4 版本中,可以通过以下方式去除尾随空格并返回字符长度。这里使用
TRIM()
函数处理尾随空格,然后计算字符长度:示例:
SELECT character_length(TRIM(TRAILING FROM '1234 '::char(10)));
解释:
TRIM(TRAILING FROM ...)
:去除字符串末尾的空格。character_length()
:返回去除尾随空格后的字符长度。
输出结果:
4
如果需要计算字节长度
如果您需要按字节数计算,而不是字符数(这在 Vertica 中是通过
USING OCTETS
实现的),可以在 Wutong DB 中使用octet_length()
函数:SELECT octet_length('1234 '::char(10));
- 结果:
10
(因为char(10)
类型会自动填充到 10 字节,即使有尾随空格)。
Wutong DB 6 解决办法:
在 Wutong DB 6 中,可以使用与 8.2.15 相同的方式来处理尾随空格和字符长度,因为两者的基本处理方式相同:
示例:
SELECT character_length(TRIM(TRAILING FROM '1234 '::char(10)));
解释:
TRIM(TRAILING FROM ...)
:去除尾随空格。character_length()
:返回去除尾随空格后的字符长度。
输出结果:
4
如果需要计算字节长度
SELECT octet_length('1234 '::char(10));
- 结果:
10
## 7. chr
功能说明:
chr(ascii_code)
函数返回给定 ASCII 码对应的字符。该函数常用于字符和数值的转换。测试语句:
select chr(65) from gs_test.test_function_avg limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
有数据
Wutong DB 输出结果:
在梧桐数据库输出如下所示:
有数据
## 8. collation
功能说明:
collation(expression, collation_name)
函数返回表达式按指定排序规则排序后的结果。该函数用于处理不同的字符串比较标准。测试语句:
select collation('U.S.A','LEN_AS')=collation('USA','LEN_AS');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
TRUE
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function collation(unknown, unknown) does not exist
Wutong DB 5.4 替代方案:
Wutong DB 5.4 不支持显式设置排序规则,但可以通过强制设置排序规则来比较两个字符串。
Wutong DB 6 替代方案:
Wutong DB 6 直接支持通过
COLLATE
指定排序规则:SELECT 'U.S.A' COLLATE "C" = 'USA' COLLATE "C";
## 9. concat
功能说明:
concat(expression1, expression2, ...)
函数将多个字符串连接为一个字符串。通常用于合并多个字段或值。测试语句:
select 202405 statis_month, a.cpid, a.pt, concat(round((a.pt/b.sum_pt)*100,2),'%') as percent from gs_test.test_function_concat01 a, gs_test.test_function_concat02 b order by a.cpid,a.pt,percent ;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
operator does not exist: character varying / character varying
Wutong DB 5.4 替代方案:
Wutong DB 5.4 不支持
concat()
,但可以使用||
操作符进行字符串连接:SELECT string1 || string2;
Wutong DB 6 替代方案:
Wutong DB 6 支持
concat()
函数:SELECT concat(string1, string2);
## 10. decode
功能说明:
decode(expression, search, result, ..., default)
函数在 SQL 中用于模仿CASE
表达式,根据匹配的值返回对应的结果。常用于简化条件查询。测试语句:
select distinct decode(a.activity_type,'1','4G 产品类 ','2',' 终端类 ','3',' 流量类 ','4',' 数字化服务类 ','5',' 基础服务类 ','6',' 其它类 ') campaign_type_name -- 活动类型名字 from gs_test.test_function_decode a --where a.statis_day = 20240618 --and a.channel_id in ('9310100001541','9310500001562') order by campaign_type_name ;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出如下图所示:
## 11. edit_distance
功能说明:
edit_distance(string1, string2)
函数返回两个字符串之间的编辑距离,即将一个字符串转换为另一个字符串所需的最小操作数。该函数用于字符串相似性分析。测试语句:
select edit_distance('kitten','knitting');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
3
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function edit_distance(unknown, unknown) does not exist
Wutong DB 5.4 替代方案:
在 Wutong DB 5.4 版本中,由于不支持内置的
edit_distance
函数(通常通过levenshtein
实现),可以通过以下方式实现字符串之间的编辑距离计算:自定义函数 来实现简单的 Levenshtein 编辑距离算法。实现 Levenshtein 编辑距离算法
Levenshtein 编辑距离计算两个字符串之间的最小编辑操作数(插入、删除、替换)。
- 自定义函数实现 Levenshtein 编辑距离
CREATE OR REPLACE FUNCTION levenshtein_distance(s1 TEXT, s2 TEXT) RETURNS INTEGER AS $$ DECLARE l1 INTEGER := LENGTH(s1); l2 INTEGER := LENGTH(s2); d INTEGER[][] := ARRAY[]::INTEGER[]; i INTEGER; j INTEGER; cost INTEGER; BEGIN -- 初始化矩阵 FOR i IN 0..l1 LOOP d := array_append(d, ARRAY[]::INTEGER[]); d[i] := array_append(d[i], i); END LOOP; FOR j IN 0..l2 LOOP d[0] := array_append(d[0], j); END LOOP; -- 动态计算编辑距离 FOR i IN 1..l1 LOOP FOR j IN 1..l2 LOOP IF SUBSTRING(s1 FROM i FOR 1) = SUBSTRING(s2 FROM j FOR 1) THEN cost := 0; ELSE cost := 1; END IF; d[i][j] := LEAST( d[i-1][j] + 1, -- 删除 d[i][j-1] + 1, -- 插入 d[i-1][j-1] + cost -- 替换 ); END LOOP; END LOOP; -- 返回编辑距离 RETURN d[l1][l2]; END;
使用示例
SELECT levenshtein_distance('kitten', 'sitting');
这个函数会返回两个字符串之间的 Levenshtein 编辑距离。在这个例子中,结果是 3('kitten' 转换为 'sitting' 需要三次编辑操作:替换 'k' 为 's'、替换 'e' 为 'i' 和插入 'g')。
Wutong DB 6 替代方案:
Wutong DB 6 支持
levenshtein()
函数,返回两个字符串的编辑距离:SELECT levenshtein('kitten', 'sitting');
## 12. greatest
功能说明:
greatest(expression1, expression2, ...)
函数返回多个表达式中最大的值。通常用于比较多个字段。测试语句:
select 20240619 , -- 统计日期 a.up_area_code , -- 地市编码,全省为 999 a.up_area_name , -- 地市名称 12 , -- 帧数 ' 企业宽带净增条数(条)' , a.order_id , -- 排序 value_15 , -- 目标 value_01 , -- 当日净增 value_02 , -- 当月净增 value_03 , -- 累计净增 value_04 , -- 当日到达 greatest(value_05 ,0), -- 完成进度 row_number()over(order by value_05 desc) -- 排名 from gs_test.test_function_greatest a where up_area_code <> '999' order by a.up_area_code,a.up_area_name,a.order_id,value_15,value_01,value_02,value_03,value_04;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出如下图所示:
## 13. greatestb
功能说明:
greatestb(expression1, expression2, ...)
函数与greatest
类似,但处理的是二进制字符串的比较。测试语句:
select greatestb('7','5','10');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
7
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function greatestb(unknown, unknown, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
1、可以使用
encode()
函数将二进制数据(
bytea
类型)转换为可比较的字符串形式(如十六进制),然后使用标准的greatest()
函数进行比较。SELECT greatest(encode('abc'::bytea, 'hex'), encode('xyz'::bytea, 'hex'));
解释:
encode(data, 'hex')
:将bytea
数据转换为十六进制字符串格式。greatest()
:比较多个字符串并返回最大值。
2、使用
decode()
进行字节数据处理如果需要返回字节数据本身而不是转换为字符串后的最大值,可以先将二进制数据转换为十六进制字符串,比较后再使用
decode()
函数将其转换回bytea
。SELECT decode(greatest(encode('abc'::bytea, 'hex'), encode('xyz'::bytea, 'hex')), 'hex');
解释:
decode(string, 'hex')
:将十六进制字符串转换回bytea
类型。
- 示例:
- 假设您有两个二进制值
abc
和xyz
,想要比较它们并返回较大的值:
-- 将 'abc' 和 'xyz' 转换为 bytea 格式并进行比较 SELECT decode(greatest(encode('abc'::bytea, 'hex'), encode('xyz'::bytea, 'hex')), 'hex');
3、 处理字节数据的最大值比较
如果
greatestb
处理的是其他形式的字节数据,例如文件的二进制内容或者特定编码格式的数据,您可以根据需要使用不同的encode
格式(如base64
)进行处理和比较。
## 14. hex_to_integer
功能说明:
hex_to_integer(hex_string)
函数将十六进制字符串转换为整数。用于处理十六进制数值数据。测试语句:
select 20240619, (call_duration/60) call_duration, hex_to_integer(substr(to_char(cell_id),1,5)) cell_id from gs_test.test_function_hex_to_integer where call_type_id='01' and cell_id!='SBC' order by call_duration,cell_id;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function to_char(character varying) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持通过
to_number()
函数进行十六进制到整数的转换:SELECT to_number('A', 'XXXXXXXX');
## 15. initcap
功能说明:
initcap(expression)
函数将字符串的每个单词的首字母大写,其余字母小写。常用于格式化字符串以符合标题或名称格式。测试语句:
select initcap('john doe');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
John Doe
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
John Doe
## 16. initcapb
功能说明:
initcapb(expression)
函数类似于initcap
,但处理的是字节字符串。测试语句:
select initcapb('high speed database');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
High Speed Database
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function initcapb(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
initcap()
函数,可以直接使用:SELECT initcap('john doe');
## 17. insert
功能说明:
insert(original_string, position, length, replacement_string)
函数用于在原始字符串中从指定位置开始插入新的子字符串,替换指定长度的字符。测试语句:
select insert('Warehouse',1,3,'Stor');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
Storehouse
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function insert(unknown, integer, integer, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
使用
overlay()
函数进行字符串插入:SELECT overlay(string placing 'substring' FROM position);
## 18. instr
功能说明:
instr(original_string, substring)
函数返回子字符串在原始字符串中第一次出现的位置。常用于查找字符串中的子串。测试语句:
select distinct substr(b.cell_name,instr(b.cell_name,'-',1,2)+1) name -- 学校名称 from gs_test.test_function_instr b order by name;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出错误,结果如下所示:
syntax error at or near "name"
Wutong DB 5.4 和 Wutong DB 6 替代方案:
使用
position()
函数:SELECT position('substring' IN 'string');
## 19. log10
功能说明:
log10(number)
函数返回给定数值的以 10 为底的对数。常用于数学和统计计算。测试语句:
select log10(100);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
2
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function log10(integer) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
log()
函数,可以使用log(10, value)
来计算:SELECT log(10, number);
## 20. instrb
功能说明:
instrb(original_string, substring)
函数类似于instr
,但处理的是字节字符串。测试语句:
select instrb('stra β e',' β ');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
5
Wutong DB 输出结果:
在梧桐数据库输出结果:(与 Vertica 精度不同)
5
## 21. isutf8
功能说明:
isutf8(expression)
函数检查给定字符串是否为有效的 UTF-8 编码。测试语句:
select isutf8(E'\xc2\xc0');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
FALSE
Wutong DB 输出结果:
在梧桐数据库输出错误 ,结果如下所示:
invalid byte sequence for encoding "UTF8": 0xc2c0
Wutong DB 替代方案:
由于 Wutong DB 默认使用 UTF-8 编码,数据库通常会自动检测并确保插入的字符串是有效的 UTF-8 编码。如果插入非 UTF-8 字符串,Wutong DB 会抛出错误。
如果您需要在 Wutong DB 中显式检测字符串的编码为 UTF-8,可以使用以下几种方式来处理。
1、利用数据库的默认编码设置:
Wutong DB 默认使用 UTF-8 作为数据库编码,因此通常不需要显式检测。可以通过以下 SQL 查询确认数据库编码:
SHOW SERVER_ENCODING;
如果返回
UTF8
,则数据库默认会拒绝非 UTF-8 编码的字符串输入。2、自定义函数检测:
虽然 Wutong DB 没有直接的
isutf8
函数,但您可以编写自定义的正则表达式来检测字符串是否为有效的 UTF-8 字符。使用正则表达式匹配有效的 UTF-8 字符范围。例如,可以使用正则表达式来匹配 UTF-8 字符范围:
SELECT your_string ~ '^[\x00-\x7F\xC2-\xF4][\x80-\xBF]*$' AS is_utf8;
## 22. least
功能说明:
least(expression1, expression2, ...)
函数返回多个表达式中最小的值。通常用于比较多个字段。测试语句:
select up_area_code, least(value_22/100,1) a, least(value_24/100,1) b, least(value_26/100,1) c, least(value_28/100,1) d, least(value_30/100,1) e from gs_test.test_function_least --where statis_day = 20240619 -- and mms_flag = 1 -- and up_area_code <> '999' order by up_area_code limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 23. leastb
功能说明:
leastb(expression1, expression2, ...)
函数与least
类似,但处理的是二进制字符串的比较。测试语句:
select leastb('7','5','10');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
10
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,如下所示:
function leastb(unknown, unknown, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
least()
函数,可以直接使用:SELECT least(value1, value2, ...);
## 24. left
功能说明:**
left(expression, number)
函数返回字符串中最左边的指定数量的字符。测试语句:
select charge_number as serv_number , date(left(start_time,8)) as valid_date , -- 产生话单开始时间 '2' from gs_test.test_function_left -- 流量漫游详单 where --to_number(settle_month)='202405' -- 账期年月 --filename like '%CNGO%' -- 话单文件名文件名 --and home_prov_code not in ('971','891') -- 归属局代码 用户归属青海西藏不结算 --service_type ='1' -- 服务类型 --and flow_up_dis+flow_dn_dis >0 -- 优惠上行流量 + 优惠下行流量 charge_number is not null group by charge_number, start_time order by serv_number,valid_date limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 25. length
功能说明:
length(expression)
函数返回字符串的长度。类似于character_length
,但包括空格。测试语句:
select case when length(yst_yw)>0 then left(yst_yw,length(yst_yw)-1) end yst_yw ,-- 已渗透业务 case when length(tj_yw)>0 then left(tj_yw,length(tj_yw)-1) end tj_yw -- 推荐业务 from ( select max(case when spt_sr>0 then ' 商铺通 ,' else '' end)|| max(case when sqt_sr>0 then ' 商企通 ,' else '' end)|| max(case when xzst_sr>0 then ' 新住宿 ,' else '' end)|| max(case when zx_sr>0 then ' 专线(含企业宽带),' else '' end)|| max(case when ydy_sr>0 then ' 移动云 ,' else '' end)|| max(case when qly_sr>0 then ' 千里眼(含明厨亮灶),' else '' end) yst_yw,-- 已渗透业务 max(case when spt_sr<=0 then ' 商铺通 ,' else '' end)|| max(case when sqt_sr<=0 then ' 商企通 ,' else '' end)|| max(case when xzst_sr<=0 then ' 新住宿 ,' else '' end)|| max(case when zx_sr<=0 then ' 专线(含企业宽带),' else '' end)|| max(case when ydy_sr<=0 then ' 移动云 ,' else '' end)|| max(case when qly_sr<=0 then ' 千里眼(含明厨亮灶),' else '' end) tj_yw -- 推荐业务 from gs_test.test_function_length b)a order by yst_yw,tj_yw ;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 26. lower
功能说明:
lower(expression)
函数将字符串中的所有字母转换为小写。测试语句:
select substr(right(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3),1, (instr(lower(right(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)),length(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)))-3)),'-'))-1) a,-- 小区编码 1 '00'||substr(right(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3), instr(lower(right(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3)),'-')+1,3) b, right(upper(lpad(to_hex(cast(tac_cd as integer)),8,'0')),4) c, -- 跟踪编码 net_type, -- 基站类型 region_admini_name -- 位置类型 from gs_test.test_function_lower --where --net_type ='4G' and region_code not in ('931','937') --and cell_id is not null --substr(cell_id,1,7)='460-00-' --and substr(cell_id,1,8) not in('460-00--','460-00- ','460-00-B','460-00-E','460-00-F','460-00-9') --and substr(cell_id,1,9)<>'460-00-0-' --and (substr(right(cell_id,2),1,1)='-' or substr(right(cell_id,4),1,1)='-' or substr(right(cell_id,3),1,1)='-') --and length(trim(cell_id))>10 --translate(lower(tac_cd),'abcdeftqljlrn()-_.+',repeat('0',10)) =lower(tac_cd) --length(trim(translate(tac_cd,'0123456789','')))=0 --tac_cd not like '% %' -- and length(village_code)=8 order by a,b,c,net_type,region_admini_name limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 27. lowerb
功能说明:
lowerb(expression)
函数类似于lower
,但处理的是字节字符串。测试语句:
select lowerb('The Vertica Database');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果:
the vertica database
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function lowerb(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
lower()
函数,可以直接使用:SELECT lower('STRING');
## 28. lpad
功能说明:
lpad(expression, length, fill_string)
函数将填充字符添加到字符串的左侧,直到达到指定的长度。测试语句:
select substr(right(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3),1, (instr(lower(right(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)),length(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)))-3)),'-'))-1) a,-- 小区编码 1 '00'||substr(right(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3), instr(lower(right(substr(cell_id,(instr(lower(cell_id),'-')+1), length(cell_id)), length(substr(cell_id,(instr(lower(cell_id),'-')+1),length(cell_id)))-3)),'-')+1,3) b, right(upper(lpad(to_hex(cast(tac_cd as integer)),8,'0')),4) c, -- 跟踪编码 net_type, -- 基站类型 region_admini_name -- 位置类型 from gs_test.test_function_lower --where --net_type ='4G' and region_code not in ('931','937') --and cell_id is not null --substr(cell_id,1,7)='460-00-' --and substr(cell_id,1,8) not in('460-00--','460-00- ','460-00-B','460-00-E','460-00-F','460-00-9') --and substr(cell_id,1,9)<>'460-00-0-' --and (substr(right(cell_id,2),1,1)='-' or substr(right(cell_id,4),1,1)='-' or substr(right(cell_id,3),1,1)='-') --and length(trim(cell_id))>10 --translate(lower(tac_cd),'abcdeftqljlrn()-_.+',repeat('0',10)) =lower(tac_cd) --length(trim(translate(tac_cd,'0123456789','')))=0 --tac_cd not like '% %' -- and length(village_code)=8 order by a,b,c,net_type,region_admini_name limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 29. ltrim
功能说明:
ltrim(expression, characters)
函数从字符串的左侧移除指定的字符。测试语句:
select case when ltrim(rtrim(a.area_code)) in ('-1','0','9311','6201','6202','6203','6205') then '931' when ltrim(rtrim(a.area_code)) in ('930','931','932','933','934','935','936','937','938','939','941','943','945','947') then a.area_code else '9'||substr(a.area_code,1,2) end ac, -- 地市 case when ltrim(rtrim(a.area_code)) in ('-1','0','9311') then '3100' else a.area_code end -- 地县 from gs_test.test_function_ltrim a ------- 修改内容:替换来源表 bdcis.tb_cis_user_induser_info_day a 用户信息日表 20220525 where length(trim(coalesce(a.plan_id,'')))<=16 and a.area_code<>'7777' and a.statis_day = 20240619 order by ac,area_code limit 10 ;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 30. makeutf8
功能说明:
makeutf8(expression USING PARAMETERS replacement_string='^')
函数用于将字符串转换为 UTF-8 编码,如果字符串中包含无效字符,则使用指定的替代字符串替换。测试语句:
select makeutf8(busi_name USING PARAMETERS replacement_string=' ^ ') from gs_test.test_function_max;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
有数据
Wutong DB 输出结果:
在梧桐数据库输出错误,结果如下所示:
syntax error at or near "USING"
Wutong DB 替代方案:
Wutong DB 默认处理字符串为 UTF-8 编码,因此无需额外函数。
## 31. md5
功能说明:
md5(expression)
函数用于生成字符串的 MD5 哈希值,通常用于数据校验和加密操作。测试语句:
select md5(a.reg_nbr) from gs_test.test_function_md5 a order by reg_nbr limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 32. octet_length
功能说明:
octet_length(expression)
函数返回字符串的字节长度。与character_length
不同,它计算的是字符串在存储中的实际字节数。测试语句:
select '3', user_id,' 港澳证、台胞证开户姓名错误 ',' 开户姓名 ' from gs_test.test_function_octet_length where --((kh_name = '' or kh_name is null ) or octet_length(kh_name)<10000 ---or (masamk.chars_check(kh_name)=1 and kh_name not like '%·%') -- ) order by user_id limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 33. overlay
功能说明:
overlay(original_string PLACING replacement_string FROM position)
函数用于在指定位置用新的子字符串替换原始字符串中的部分内容。测试语句:
select overlay('123456789' placing 'ABC' from 5);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
1234ABC89
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
1234ABC89
## 34. overlayb
功能说明:
overlayb(original_string, replacement_string, position)
函数与overlay
类似,但处理的是字节字符串。测试语句:
select overlayb('123456789','xxx',2);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
1xxx56789
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function overlayb(unknown, unknown, integer) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
overlay()
函数:SELECT overlay('abcdef' placing 'xyz' from 2 for 3);
## 35. position
功能说明:
position(substring IN original_string)
函数返回子字符串在原始字符串中首次出现的位置。测试语句:
select case when channel_name like '% 县 %' and channel_name not like '% 中移铁通 %' and channel_name not like '% 网格 %' then right(substring(channel_name from position(' 县 ' in channel_name)+length(' 县 ')),30) when channel_name like '% 市 %' then right(substring(channel_name from position(' 市 ' in channel_name)+length(' 市 ')),30) when channel_name like '% 区 %' and channel_name not like '% 小区 %' and channel_name not like '% 网格 %' then right(substring(channel_name from position(' 区 ' in channel_name)+length(' 区 ')),30) else channel_name end as channel_name_alias from gs_test.test_function_position order by channel_name_alias limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 36. positionb
功能说明:
positionb(substring IN original_string)
函数类似于position
,但处理的是字节字符串。测试语句:
select positionb('stra β e',' β e');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
5
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function positionb(unknown, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
使用
position()
函数:SELECT position('substring' IN 'string');
## 37. quote_ident
功能说明:
quote_ident(identifier)
函数用于将标识符(如列名、表名)转换为适合 SQL 语句中引用的格式,通常用引号括起来。测试语句:
select quote_ident('select');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
"select"
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
"select"
## 38. quote_literal
功能说明:
quote_literal(string)
函数用于将字符串转换为适合 SQL 语句中引用的格式,通常用单引号括起来,并适当转义内部的引号。测试语句:
select quote_literal('This is a "quoted" string');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
'This is a "quoted" string'
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
'This is a "quoted" string'
## 39. quote_nullable
功能说明:
quote_nullable(expression)
函数类似于quote_literal
,但它会处理 NULL 值,返回字符串或 NULL。测试语句:
select quote_nullable('This is a "quoted" string');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
'This is a "quoted" string'
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function quote_nullable(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
quote_nullable()
函数,可以直接使用:SELECT quote_nullable(expression);
## 40. repeat
功能说明:
repeat(string, number)
函数将字符串重复指定的次数,生成一个新的字符串。测试语句:
select repeat('vmart',3);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
vmartvmartvmart
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
vmartvmartvmart
## 41. replace
功能说明:
replace(original_string, search_string, replacement_string)
函数在原始字符串中搜索并替换所有出现的子字符串。测试语句:
select a.oper_staff_code userid, -- 登陆工号 a.oper_staff_name username, -- 人员名称 a.op_status status, -- 工号状态 a.org_id orgid, -- 组织编码 ( 固定 ) '' Email, -- 邮箱 replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','') mobile, -- 联系电话 a.op_passwd as password, -- 账号密码 a.valid_date effectdate, -- 生效时间 a.expire_date expiredate,-- 失效时间 , dense_rank()over(partition by replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','') order by case when oper_staff_code like '6%' then 2 else 1 end ,a.valid_date desc) rn from gs_test.ceshi_replace a where length(replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','')) = 11 and a.op_status = '1' and lock_status = 'N' and length(a.oper_staff_code)=8 order by userid;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 42. right
功能说明:
right(expression, number)
函数返回字符串中最右边的指定数量的字符。测试语句:
select statis_month, case when boss_opt_type in ('1','13','14','17') and (opp_number_y like '00861%' or opp_number_y like '1258%' or opp_number_y like '8619%' or opp_number_y like '17951%' or opp_number_y like '01%') and length(trim(opp_number_y)) > 11 then right(trim(opp_number_y),11) when opp_number_y like '6601%' and length(trim(opp_number_y)) > 11 and boss_opt_type <> '1' then right(trim(opp_number_y),11) when opp_number_y like '167%' and boss_opt_type = '1' then opp_number_y when opp_number_y like '8616%' and length(trim(opp_number_y)) > 11 then right(trim(opp_number_y),11) when boss_opt_type in ('18','9','115','3','4','1','105','107','108','121','931000','931001','931002','931003','931019','931020','931021', '931022','931029','931034') then substr(opp_up_area_code,1,3)||substr(opp_number_y,1,7) else opp_number_y end as one from gs_test.tb_cis_billing_opp_day_a_xh_1 order by one limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 43. rpad
功能说明:
rpad(expression, length, fill_string)
函数将填充字符添加到字符串的右侧,直到达到指定的长度。测试语句:
select rpad('database',6,'xyz');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
databa
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
databa
## 44. rtrim
功能说明:
rtrim(expression, characters)
函数从字符串的右侧移除指定的字符。测试语句:
select left(imei_number,14), upper(rtrim(cell_id)||base_id) from gs_test.tb_cis_su_gsm_list_cur_temp1 order by left(imei_number,14),upper(rtrim(cell_id)||base_id) limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 45. sha1
功能说明:
sha1(expression)
函数生成字符串的 SHA-1 哈希值,通常用于数据加密和校验。测试语句:
select sha1('123');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
40bd001563085fc35165329ea1ff5c5ecbdbbeef
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function sha1(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 不直接支持
sha1()
,需要通过pgcrypto
扩展提供支持:SELECT digest('string', 'sha1');
## 46. sha224
功能说明:
sha224(expression)
函数生成字符串的 SHA-224 哈希值,提供更高的安全性。测试语句:
select sha224('123');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
78d8045d684abd2eece923758f3cd781489df3a48e1278982466017f
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function sha224(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
同样需要
pgcrypto
扩展:SELECT digest('string', 'sha224');
## 47. sha256
功能说明:
sha256(expression)
函数生成字符串的 SHA-256 哈希值,常用于需要更高安全性的场景。测试语句:
select sha256('123');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function sha256(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
需要
pgcrypto
扩展:SELECT digest('string', 'sha256');
## 48. sha384
功能说明:
sha384(expression)
函数生成字符串的 SHA-384 哈希值,用于提供更强的加密保护。测试语句:
select sha384('123');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
9a0a82f0c0cf31470d7affede3406cc9aa8410671520b727044eda15b4c25532a9b5cd8aaf9cec4919d76255b6bfb00f
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function sha384(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
需要
pgcrypto
扩展:SELECT digest('string', 'sha384');
## 49. sha512
功能说明:
sha512(expression)
函数生成字符串的 SHA-512 哈希值,适用于最高级别的安全需求。测试语句:
select sha512('123');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function sha512(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
需要
pgcrypto
扩展:SELECT digest('string', 'sha512');
## 50. soundex
功能说明:
soundex(expression)
函数生成字符串的 Soundex 值,用于将类似发音的字符串归为一类,通常用于模糊搜索。测试语句:
select soundex('Smith');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
S530
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function soundex(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
soundex()
函数:SELECT soundex('Smith');
## 51. soundex_matches
功能说明:
soundex_matches(string1, string2)
函数用于比较两个字符串的 Soundex 值,判断它们是否发音相似。测试语句:
select soundex_matches('Lewis','Li');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
3
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function soundex_matches(unknown, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
可以使用
soundex()
函数手动比较:SELECT soundex('Lewis') = soundex('Luis');
## 52. space
功能说明:
space(number)
函数返回一个由指定数量的空格组成的字符串。测试语句:
select 'x' || space(10) || 'y';
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
x y
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function space(integer) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
使用
repeat()
函数生成指定长度的空格:SELECT repeat(' ', 10);
## 53. split_part
功能说明:
split_part(string, delimiter, index)
函数按指定分隔符分割字符串,并返回指定位置的部分。测试语句:
select statis_day ,split_part(area_code,'+',1) area_code ,split_part(area_name,'+',1) area_name from gs_test.tb_mms_group_pair_sale_pk_day b where statis_day = '20230731' and mms_flag = 2 and length(area_code)>4 order by area_code;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 54. split_partb
功能说明:
split_partb(string, delimiter, index)
函数类似于split_part
,但处理的是字节字符串。测试语句:
select split_partb('stra β e~@~caf~@~soup','~@~',3);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
soup
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function split_partb(unknown, unknown, integer) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
split_part()
函数:SELECT split_part('abc,def,ghi', ',', 2);
## 55. strpos
功能说明:
strpos(string, substring)
函数返回子字符串在字符串中首次出现的位置。测试语句:
select strpos('hello world','world');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
7
Wutong DB 输出结果:
在梧桐数据库输出结果如下所示:
7
## 56. strposb
功能说明:
strposb(string, substring)
函数类似于strpos
,但处理的是字节字符串。测试语句:
select strposb('stra β e','e');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
7
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function strposb(unknown, unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
使用
strpos()
函数:SELECT strpos('abcdef', 'cd');
## 57. substr
功能说明:
substr(string, start, length)
函数返回从字符串中指定位置开始的子字符串,长度为指定的字符数。测试语句:
select --id -- 记录行号 substr(grid_code,3,3) , -- 地市编码 substr(grid_code,4,4) , -- 区县编码 grid_code , -- 网格编码 government_id , -- 政企市场 Id louyu_name , -- 政企市场名称 case when louyu_type like '% 商务楼宇 %' then '01' when louyu_type like' % 专业及综合市 %' then '04' when louyu_type like '% 商业聚类 %' then '03' when louyu_type like '% 园区 %' then '02'else '05' end government_type , -- 市场类型 ' 未知 ' address , -- 地址 longitude , -- 经度 latitude -- 纬度 -- 数据月份 from (select a.*, row_number() over() +100000 as government_id from gs_test.tb_ads_mk_group_louyu_ruge a) as t order by grid_code,louyu_name limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 58. substrb
功能说明:
substrb(string, start, length)
函数类似于substr
,但处理的是字节字符串。测试语句:
select offer_id, substrb(offer_name,1,50), case when offer_type='50' then '1' else '2' end as offer_type, substrb(remark,1,200) from gs_test.ceshi_substrb where offer_type in('50','51','52','53') and to_number(to_char(expire_date,'yyyymmdd'))>'20120607' order by offer_id
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 59. substring
功能说明:
substring(string FROM start FOR length)
函数用于从字符串中提取指定位置的子字符串,开始位置和长度可以指定。这个函数类似于substr
,但语法稍有不同。测试语句:
select channel_id, channel_name, channel_type, case when channel_name like '% 网格 %' then (case when channel_name like '% 中移铁通 %' then (case when channel_name like '% 装维随销 %' then ' 装维随销渠道 ' when channel_name like '% 商客直销 %' then ' 商客直销渠道 ' when channel_name like '% 直销渠道 %' then right(substring(channel_name from position(' 网格 ' in channel_name)+length(' 网格 ')),15) when channel_name like '% 特约代理点 %' then right(substring(channel_name from position(' 网格 ' in channel_name)+length(' 网格 ')),15) when channel_name like '% 指定专营店 %' then right(substring(channel_name from position(' 网格 ' in channel_name)+length(' 网格 ')),15) else channel_name end) when channel_name like'% 宽带包营人员 %' then right(substring(channel_name from position(' 人员 ' in channel_name)+length(' 人员 ')),15) when channel_name like '% 网格 -%' then right(substring(channel_name from position('-' in channel_name)+length('-')),6) when channel_name like'% 承包经营渠道 %' and channel_name not like '% 中移铁通 %' then ' 承包经营渠道 ' when (channel_name like'% 直销渠道 %' or channel_name like'% 专营店 %' or channel_name like'% 代办员 %' or channel_name like'% 承包渠道 %' or channel_name like'% 特约代理点 %' or channel_name like '% 服务站 %' or channel_name like '% 手机连锁 %' or channel_name like '% 服务中心 %' or channel_name like'% 销渠道 %' or channel_name like'% 社会渠道 %' or channel_name like'% 营业厅 %' or channel_name like'% 铁通装维随销 %' or channel_name like '% 铁通装维队 %' or channel_name like'% 便民服务点 %' or channel_name like'% 直销装维渠道 %' or channel_name like'% 铁通装维营代办点 %' or channel_name like'% 代理点 %' or channel_name like'% 手机店 %' or channel_name like '% 经理局向 %' or channel_name like '% 渠道合伙人 %' ) then right(substring(channel_name from position(' 网格 ' in channel_name)+length(' 网格 ')),15) else channel_name end ) when channel_name like '% 县 %' and channel_name not like '% 中移铁通 %' and channel_name not like '% 网格 %' then right(substring(channel_name from position(' 县 ' in channel_name)+length(' 县 ')),30) when channel_name like '% 市 %' then right(substring(channel_name from position(' 市 ' in channel_name)+length(' 市 ')),30) when channel_name like '% 区 %' and channel_name not like '% 小区 %' and channel_name not like '% 网格 %' then right(substring(channel_name from position(' 区 ' in channel_name)+length(' 区 ')),30) else channel_name end as channel_name_alias from gs_test.tb_ado_mk_mms_automation_channel_mon_tmp0 order by channel_id limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 60. translate
功能说明:
translate(string, from_string, to_string)
函数用于将字符串中的字符替换为另一个字符串中的对应字符。这个函数类似于replace
,但可以同时替换多个字符。测试语句:
select 1,user_id ,' 外国护照名称错误 ' from gs_test.tb_cis_user_induser_real_cert_list_day_tmp10 where reg_type_nbr in ( '100000005') -- 个人客户 and (length(trim(translate(replace(trim(cust_name),' ','x'),'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM.','')))>=1 or cust_name is null);
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 61. trim
功能说明:
trim([LEADING | TRAILING | BOTH] characters FROM string)
函数用于去除字符串两端(或指定方向)的指定字符(默认为空格)。常用于清理数据中的不必要字符。测试语句:
select a.oper_staff_code userid, -- 登陆工号 a.oper_staff_name username, -- 人员名称 a.op_status status, -- 工号状态 a.org_id orgid, -- 组织编码 ( 固定 ) '' Email, -- 邮箱 replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','') mobile, -- 联系电话 a.op_passwd as password, -- 账号密码 a.valid_date effectdate, -- 生效时间 a.expire_date expiredate,-- 失效时间 , dense_rank()over(partition by replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','') order by case when oper_staff_code like '6%' then 2 else 1 end ,a.valid_date desc) rn from gs_test.ceshi_replace a where length(replace(replace(replace(trim(a.contact_number),'?',''),',',''),' ú ','')) = 11 and a.op_status = '1' and lock_status = 'N' and length(a.oper_staff_code)=8 order by userid;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 62. upper
功能说明:
upper(string)
函数将字符串中的所有字母转换为大写。常用于格式化数据,使其在比较时不区分大小写。测试语句:
select left(imei_number,14), upper(rtrim(cell_id)||base_id) from gs_test.tb_cis_su_gsm_list_cur_temp1 order by left(imei_number,14),upper(rtrim(cell_id)||base_id) limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 63. upperb
功能说明:
upperb(string)
函数类似于upper
,但处理的是字节字符串。它将字节字符串中的所有字母转换为大写。测试语句:
select upperb('AbcdEfG');
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下所示:
ABCDEFG
Wutong DB 输出结果:
在梧桐数据库输出错误,找不到该函数,结果如下所示:
function upperb(unknown) does not exist
Wutong DB 5.4 和 Wutong DB 6 替代方案:
Wutong DB 支持
upper()
函数:SELECT upper('abcdef');
## 64. right
功能说明:
right(string, length)
函数返回字符串中最右边的指定长度的子字符串。该函数在处理字符串尾部数据时非常有用。测试语句:
select statis_month, case when boss_opt_type in ('1','13','14','17') and (opp_number_y like '00861%' or opp_number_y like '1258%' or opp_number_y like '8619%' or opp_number_y like '17951%' or opp_number_y like '01%') and length(trim(opp_number_y)) > 11 then right(trim(opp_number_y),11) when opp_number_y like '6601%' and length(trim(opp_number_y)) > 11 and boss_opt_type <> '1' then right(trim(opp_number_y),11) when opp_number_y like '167%' and boss_opt_type = '1' then opp_number_y when opp_number_y like '8616%' and length(trim(opp_number_y)) > 11 then right(trim(opp_number_y),11) when boss_opt_type in ('18','9','115','3','4','1','105','107','108','121','931000','931001','931002','931003','931019','931020','931021', '931022','931029','931034') then substr(opp_up_area_code,1,3)||substr(opp_number_y,1,7) else opp_number_y end as one from gs_test.tb_cis_billing_opp_day_a_xh_1 order by one limit 10;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 65. rtrim
功能说明:
rtrim(string, characters)
函数从字符串的右侧去除指定的字符。该函数常用于清理尾部无用的字符(默认为空格)。测试语句:
select left(imei_number,14), upper(rtrim(cell_id)||base_id) from gs_test.tb_cis_su_gsm_list_cur_temp1 order by left(imei_number,14),upper(rtrim(cell_id)||base_id) limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 66. split_part
功能说明:
split_part(string, delimiter, field)
函数用于根据指定的分隔符拆分字符串,并返回指定字段的位置。它适用于解析结构化字符串数据。测试语句:
select statis_day ,split_part(area_code,'+',1) area_code ,split_part(area_name,'+',1) area_name from gs_test.tb_mms_group_pair_sale_pk_day b where statis_day = '20230731' and mms_flag = 2 and length(area_code)>4 order by area_code;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
## 67. substr
功能说明:
substr(string, start, length)
函数从字符串的指定位置开始,返回指定长度的子字符串。该函数常用于提取字符串的部分内容。测试语句:
select --id -- 记录行号 substr(grid_code,3,3) , -- 地市编码 substr(grid_code,4,4) , -- 区县编码 grid_code , -- 网格编码 government_id , -- 政企市场 Id louyu_name , -- 政企市场名称 case when louyu_type like '% 商务楼宇 %' then '01' when louyu_type like' % 专业及综合市 %' then '04' when louyu_type like '% 商业聚类 %' then '03' when louyu_type like '% 园区 %' then '02'else '05' end government_type , -- 市场类型 ' 未知 ' address , -- 地址 longitude , -- 经度 latitude -- 纬度 -- 数据月份 from (select a.*, row_number() over() +100000 as government_id from gs_test.tb_ads_mk_group_louyu_ruge a) as t order by grid_code,louyu_name limit 20;
Vertica 输出结果:
vertica 可以直接使用该函数,输出结果如下图所示:
Wutong DB 输出结果:
在梧桐数据库输出结果如下图所示:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。