拼音相关函数

PolarDB PostgreSQL版(兼容Oracle)提供了fn_getpyget_pyjm两个函数,用于将汉字字符串转换为拼音。当您需要根据汉字读音进行搜索、排序或建立索引时,可以使用这两个函数快速获取全拼或拼音首字母,有效解决Oracle原生语法不支持直接获取汉字拼音的问题。

PolarDB内置了两个常用的拼音相关函数,以满足不同的业务场景需求:

  • fn_getpy:功能全面的拼音转换函数,支持将汉字转换为全拼(大小写)、首字母大写全拼、拼音首字母(大小写)等多种格式。

  • get_pyjm:一个简化的快捷函数,专门用于快速获取汉字字符串的拼音首字母(大写格式)。

前提条件

支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:

  • Oracle语法兼容 2.0(内核小版本2.0.14.17.35.0及以上)

说明

注意事项

使用拼音相关函数时,请注意其与Oracle原生行为的差异:

  • 多音字场景Oraclefn_getpyget_pyjm函数无法处理多音字,一个汉字固定一个读音。而PolarDB能够处理常见的多音字,其返回结果更符合中文语言习惯。

    多音字示例

    postgres=# SELECT fn_getpy('重庆') from dual;
     fn_getpy
    -----------
     chongqing
    
    postgres=# SELECT fn_getpy('重要') from dual;
     fn_getpy
    ----------
     zhongyao
    
    postgres=# SELECT get_pyjm('重庆') from dual;
     get_pyjm
    ----------
     CQ
    
    postgres=# SELECT get_pyjm('重要') from dual;
     get_pyjm
    ----------
     ZY
  • 中文与非中文字符混合:当向fn_getpy函数传入混合字符串参数时,Oracle会将中文字符转为拼音,同时保留非中文字符。而PolarDB会忽略非中文字符,只返回中文字符的拼音。例如,对于 'A中国123',函数将返回'zhongguo'

  • NULL值处理:当向get_pyjm函数传入NULL参数时,Oracle会返回异常,而PolarDB会返回NULL,而不会返回异常。

fn_getpy函数

fn_getpy函数根据您指定的输出格式,将中文字符串转换为相应的拼音。

函数

FUNCTION sys.fn_getpy(
    p_str IN VARCHAR2,
    p_flag NUMBER DEFAULT NULL
) RETURN VARCHAR2

参数说明

参数

描述

p_str

输入的中文字符串。

p_flag

输出的拼音格式。取值范围如下:

  • 0(默认):全拼小写。

  • 1:全拼大写。

  • 2:全拼,首字母大写。

  • 3:仅首字母,小写。

  • 4:仅首字母,大写。

说明

如果不指定该参数(NULL),或设置超出合法范围,则默认为0。

示例

-- 默认格式(全拼小写)
SELECT fn_getpy('拼音') FROM dual;
-- 返回: pinyin

-- 全拼大写
SELECT fn_getpy('拼音', 1) FROM dual;
-- 返回: PINYIN

-- 全拼,首字母大写
SELECT fn_getpy('拼音', 2) FROM dual;
-- 返回: PinYin

-- 仅首字母,小写
SELECT fn_getpy('拼音', 3) FROM dual;
-- 返回: py

-- 仅首字母,大写
SELECT fn_getpy('拼音', 4) FROM dual;
-- 返回: PY

get_pyjm函数

get_pyjm函数用于快速获取字符串的拼音首字母(大写),其效果等同于fn_getpy(p_str, 4)

函数

FUNCTION sys.get_pyjm(
    P_NAME IN VARCHAR2
)
RETURN VARCHAR2

示例

SELECT get_pyjm('拼音') FROM dual;
-- 返回: PY