1
头图
  • 测试环境:

    • 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 可以直接使用该函数,输出结果如下图所示:

    ASCII_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:(与 Vertica 精度不同)

    ASCII_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    btrim_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:(与 Vertica 精度不同)

    btrim_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    concat_vertica_out.png

  • 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 可以直接使用该函数,输出结果如下图所示:

    decode_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出如下图所示:

    decode_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    greatest_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出如下图所示:

    greatest_wutongdb_out.png

## 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 类型。
    • 示例
    • 假设您有两个二进制值 abcxyz,想要比较它们并返回较大的值:
    -- 将 '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 可以直接使用该函数,输出结果如下图所示:

    hex_to_integer_vertica_out.png

  • 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 可以直接使用该函数,输出结果如下图所示:

    instr_vertica_out.png

  • 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 可以直接使用该函数,输出结果如下图所示:

    least_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    least_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    left_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    left_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    length_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    length_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    lower_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    lower_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    lpad_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    lpad_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    ltrim_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    ltrim_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    MD5_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    MD5_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    octet_length_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    octet_length_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    position_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    position_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    replace_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    replace_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    right_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    right_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    rtrim_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    rtrim_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    split_part_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    split_part_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    substr_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    substr_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    substrb_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    substrb_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    substring_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    substring_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    translate_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    translate_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    trim_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    trim_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    upper_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    upper_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    right_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    right_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    rtrim_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    rtrim_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    split_part_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    split_part_wutongdb_out.png

## 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 可以直接使用该函数,输出结果如下图所示:

    substring_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出结果如下图所示:

    substring_wutongdb_out.png


千钧
7 声望3 粉丝

不爱美食的古玩爱好者不是一个真正的程序猿!