ORACLE函数获取汉字拼音首字母

列表一行汉字

WITH A AS

(SELECT '获取汉字拼音首字母' W FROM DUAL)

SELECT SUBSTR(W, ROWNUM, 1) FROM A

CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A);

返回结果

用汉字字符集对这个列表进行排序

WITH A AS

(SELECT '获取汉字拼音首字母' W FROM DUAL)

SELECT SUBSTR(W, ROWNUM, 1) FROM A

CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A)

ORDER BY NLSSORT(SUBSTR(W, ROWNUM, 1), 'NLS_SORT=SCHINESE_PINYIN_M');

返回结果

那么根据这个原理,上面输入一个拼音A打头的字"澳",后面输入一个B大头的字"吧",找到每个音节的起止的汉字是哪个

WITH A AS

(

SELECT ROWNUM RN, CHR(ROWNUM) C FROM DUAL CONNECT BY LEVEL <= 65535

)

SELECT * FROM A WHERE LENGTHB(C) = 2

AND RN > 32768

AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') > NLSSORT('澳',

'NLS_SORT=SCHINESE_PINYIN_M')

AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') < NLSSORT('吧',

'NLS_SORT=SCHINESE_PINYIN_M')

ORDER BY NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M'); 根据返回的结果,就能看到,A的结束和B的开始的汉子分别是:“驁” “八”,依次类推可以找到其他的分界点,那么最后的函数就是如下:

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN

VARCHAR2 AS

V_COMPARE VARCHAR2(100);

V_RETURN VARCHAR2(4000);

FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS

BEGIN

RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');

END;

BEGIN

FOR I IN 1..LENGTH(P_NAME) LOOP

V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));

IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN

V_RETURN := V_RETURN || 'a';

ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN

V_RETURN := V_RETURN || 'b';

ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN

V_RETURN := V_RETURN || 'c';

ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN

V_RETURN := V_RETURN || 'd';

ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN

V_RETURN := V_RETURN || 'e';

ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN

V_RETURN := V_RETURN || 'f';

ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN

V_RETURN := V_RETURN || 'g';

ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN

V_RETURN := V_RETURN || 'h';

ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN

V_RETURN := V_RETURN || 'j';

ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN

V_RETURN := V_RETURN || 'k';

ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN

V_RETURN := V_RETURN || 'l';

ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN

V_RETURN := V_RETURN || 'm';

ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN

V_RETURN := V_RETURN || 'n';

ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN

V_RETURN := V_RETURN || 'o';

ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN

V_RETURN := V_RETURN || 'p'; ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN

V_RETURN := V_RETURN || 'q';

ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN

V_RETURN := V_RETURN || 'r';

ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN

V_RETURN := V_RETURN || 's';

ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN

V_RETURN := V_RETURN || 't';

ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN

V_RETURN := V_RETURN || 'w';

ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN

V_RETURN := V_RETURN || 'x';

ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN

V_RETURN := V_RETURN || 'y';

ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN

V_RETURN := V_RETURN || 'z';

END IF;

END LOOP;

RETURN V_RETURN;

END;

测试一下:

SELECT F_TRANS_PINYIN_CAPITAL('罗华') FROM DUAL

返回 lh

使用的时候这样查询:

select name from users t1 where ( = ? or F_TRANS_PINYIN_CAPITAL() = ?)

如果里面的?参数传递的是“罗华”,就是查询用户名是落花的人,如果传递的是lh的话,查询的就是拼音是lh的人

合集下载

取汉字首字母的函数

取汉字首字母的函数

取汉字首字母的函数

在计算机编程中,取汉字首字母的函数是一个常见的需求。这个函数的作用是将汉字转换为拼音首字母,以便于排序、搜索等操作。下面介绍一种常用的取汉字首字母的函数实现方法。

首先,需要准备一个汉字拼音表。这个表可以手动编写,也可以使用现成的拼音库。在这个表中,每个汉字对应一个或多个拼音,每个拼音都有一个对应的首字母。

接下来,实现取汉字首字母的函数。这个函数的输入是一个汉字字符串,输出是该汉字的拼音首字母。具体实现方法如下:

1. 将汉字字符串转换为Unicode编码。可以使用Python中的ord()函数实现。

2. 根据Unicode编码查找汉字拼音表,获取该汉字的拼音列表。

3. 对于每个拼音,取其首字母,并将首字母拼接起来。可以使用Python中的字符串切片实现。

4. 返回拼接后的字符串作为结果。

下面是一个Python实现的示例代码:

```

pinyin_table = {

# 汉字拼音表

}

def get_first_letter(chinese):

# 将汉字转换为Unicode编码

code = ord(chinese)

# 查找汉字拼音表

pinyin_list = pinyin_table.get(code, [])

# 取每个拼音的首字母

first_letters = [pinyin[0] for pinyin in pinyin_list]

# 拼接首字母

result = ''.join(first_letters)

return result

```

需要注意的是,这个函数只能处理单个汉字,如果需要处理汉字字符串,需要在外部循环调用该函数。

另外,由于汉字拼音存在多音字的情况,同一个汉字可能对应多个拼音,因此需要在函数中处理这种情况。一种常见的方法是选择第一个拼音的首字母作为结果,也可以将所有拼音的首字母拼接起来。

sql自动生成汉语拼音和首字母函数

sql自动生成汉语拼音和首字母函数

sql⾃动⽣成汉语拼⾳和⾸字母函数

1.Sql server⾃动⽣成拼⾳的函数

/*

根据汉字获取全拼

1.⽣成所有读⾳临时表

2.根据Chinese_PRC_CS_AS_KS_WS 排序获取读⾳

*/

CREATE function f_GetPying(@str varchar(100))

returns varchar(8000)

as

begin

declare @re varchar(8000)

--⽣成临时表

declare @t table(chr nchar(1) collate Chinese_PRC_CS_AS_KS_WS,py nvarchar(20))

insert into @t select'吖','a'

insert into @t select'厑','aes'

insert into @t select'哎','ai'

insert into @t select'安','an'

insert into @t select'肮','ang'

insert into @t select'凹','ao'

insert into @t select'⼋','ba'

insert into @t select'挀','bai'

insert into @t select'兡','baike'

insert into @t select'瓸','baiwa'

insert into @t select'扳','ban'

insert into @t select'邦','bang'

insert into @t select'⼓','bao'

insert into @t select'萡','be'

insert into @t select'陂','bei'

insert into @t select'奔','ben'

insert into @t select'伻','beng'

oracle order by 中文排序规则

oracle order by 中文排序规则

oracle order by 中文排序规则

Oracle数据库默认使用的是二进制排序规则,无法直接进行中文排序。不过,可以通过以下步骤实现中文排序:

1. 安装Collation为Chinese_Mandarin_PRC_CI_AS的Oracle数据库。

2. 将要排序的数据保存为一个带有拼音字段的临时表。

3. 使用NLS_SORT参数设置数据库的排序规则为Chinese_Mandarin_PRC_CI_AS。

4. 使用ORDER BY子句对拼音字段进行排序。

以下是一个示例查询的语法:

```sql

ALTER SESSION SET NLS_SORT =

'Chinese_Mandarin_PRC_CI_AS';

SELECT *

FROM your_table

ORDER BY pinyin_field;

```

请注意,在这个示例中,"your_table"代表你的表名,"pinyin_field"代表存储中文拼音的字段名。

值得一提的是,这种方法在查询性能方面可能会有所影响,因为Oracle需要在每次查询时对字段进行排序。另外,还可以使用第三方工具或自定义函数库来实现中文排序。

oracle sql截取字符串前几位的方法

oracle sql截取字符串前几位的方法

oracle sql截取字符串前几位的方法

Oracle SQL提供了多种方法来截取字符串的前几位。以下是几种常见的方法:

1. 使用SUBSTR函数:

SUBSTR函数允许在字符串中选择部分字符。要截取字符串的前几位,可以使用该函数。示例如下:

```

SELECT SUBSTR(column_name, 1, n) AS truncated_string

FROM table_name;

```

在上述示例中,将column_name替换为要截取的列名,table_name替换为表名,n替换为要截取的字符数目。该函数将返回截取后的字符串。

2. 使用LEFT函数:

LEFT函数用于返回字符串的左侧若干字符。可以通过指定字符数目来截取字符串的前几位。示例如下:

```

SELECT LEFT(column_name, n) AS truncated_string

FROM table_name;

```

在上述示例中,将column_name替换为要截取的列名,table_name替换为表名,n替换为要截取的字符数目。该函数将返回截取后的字符串。

3. 使用SUBSTRING函数: SUBSTRING函数与SUBSTR函数类似,也可以用来截取字符串的一部分。示例如下:

```

SELECT SUBSTRING(column_name, 1, n) AS truncated_string

FROM table_name;

```

在上述示例中,将column_name替换为要截取的列名,table_name替换为表名,n替换为要截取的字符数目。该函数将返回截取后的字符串。

请根据具体的需求选择合适的方法来截取字符串的前几位。希望对你有帮助!

SQL标量值函数:返回汉字拼音首拼

SQL标量值函数:返回汉字拼音首拼

SQL标量值函数:返回汉字拼⾳⾸拼

今天遇到⼀个需求,客户要求在系统客户端选择客户的时候,可以⽤拼⾳⾸拼去快速过滤选择,此时我们在客户表⾥⾯加多⼀个

拼⾳⾸拼字段CustPY来记录,字段加好了,我们要把所有客户名称的拼⾳简拼都更新到CustPY字段中。

为此利⽤以下函数做了个批量更新

执⾏语句:UPDATE 客户表 SET CustPY=dbo.[Fn_GetPinYin](客户名称字段)

这样就可以了。需要注意的是:多⾳字。例如 SELECT dbo.[Fn_GetPinYin]('重庆') 返回ZQ 谨此记录。

-- =============================================

-- 调⽤:SELECT dbo.[Fn_GetPinYin]('中国')

-- Create date: 2015-01-06

-- Description: 返回汉字拼⾳⾸拼

-- =============================================

CREATE FUNCTION [dbo].[Fn_GetPinYin] (@str NVARCHAR(4000))

RETURNS NVARCHAR(4000)

AS

BEGIN

DECLARE @word NCHAR(1) ,

@PY NVARCHAR(4000)

SET @PY=''

SET @str=REPLACE(@str, '(', '(')

SET @str=REPLACE(@str, ')', ')')

WHILE LEN(@str)>0

BEGIN

SET @word=LEFT(@str, 1)

--如果⾮汉字字符,返回原字符

SET @PY=@PY+(CASE WHEN UNICODE(@word) BETWEEN 19968 AND 19968+20901 THEN (SELECT TOP 1

最新提取汉语拼音第一个字母以及用VB替代EXCEL的VLookUp函数

最新提取汉语拼音第一个字母以及用VB替代EXCEL的VLookUp函数

最新提取汉语拼音第一个字母以及用VB替代EXCEL的VLookUp函数

提取汉语拼音第一个字母以及用VB替代EXCEL的VLookUp函数

Private Sub Command1_Click()

Dim V As Variant, I%, S$, J%

Const sStr$ = "中华人民共和国重庆、长安、长大" '多音字无法判别

Dim sGet$

'模糊比较时,数组应该先进行排序

V = Array("吖", "A", "八", "B", "嚓", "C", "咑", "D", "鵽", "E", "发", "F", "猤", "G", "铪", "H", "夻", "J", "咔", "K", "垃", "L", "嘸", "M", "旀", "N", "噢", "O", "妑", "P", "七", "Q", "囕", "R", "仨", "S", "他", "T",

"屲", "W", "夕", "X", "丫", "Y", "帀", "Z")

For I = 1 To Len(sStr)

S = Mid(sStr, I, 1)

If Asc(S) > 255 Or Asc(S) < 0 Then

sGet = sGet & MyVLookUp(S, V, J, False)

Else

sGet = sGet & UCase(S)

End If

Next

MsgBox sStr & vbCrLf & vbCrLf & sGet

End Sub

Private Function MyVLookUp$(ByVal InS$, ByRef InV As

Variant, ByRef OutIndex%, Optional IsExact As Boolean)

Dim I%, J%

For I = 0 To UBound(InV) - 1 Step 2

J = StrComp(InS, InV(I), vbTextCompare) If J = 0 Then

怎样将Oracle的外部表汉字转换为拼音

怎样将Oracle的外部表汉字转换为拼音

来的应用中使用代码表加一个函数来处理汉字转拼音的转换问题,现在由于工作需要必须将汉字转换为拼音,我使用了外部表来实现

or replace directory data_dir as '/app/oracle/admin/gsweb/bdump/'

dm_hz.csv to $ORACLE_BASE/admin/gsweb/bdump/

table dm_hz

har2(10) ,

har2(10) ,

har2(10) ,

har2(10) ,

rchar2(10)

ation external

racle_loader

directory data_dir

parameters

delimited by newline

TERMINATED BY ','

field values are null n ('dm_hz.csv')

创建一个function

_fun_GET_HZ_PY.sql

.

得到一个汉字的拼音头个字母的函数

文件:/home/silentwind/桌面/新文件第 1 页共 1 页得到一个汉字的拼音头个字母的函数function GetPYIndexChar( hzchar:string):char; begin // 得到一个汉字的拼音头个字母 case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of $B0A1..$B0C4 : result := 'A'; $B0C5..$B2C0 : result := 'B'; $B2C1..$B4ED : result := 'C'; $B4EE..$B6E9 : result := 'D'; $B6EA..$B7A1 : result := 'E'; $B7A2..$B8C0 : result := 'F'; $B8C1..$B9FD : result := 'G'; $B9FE..$BBF6 : result := 'H'; $BBF7..$BFA5 : result := 'J'; $BFA6..$C0AB : result := 'K'; $C0AC..$C2E7 : result := 'L'; $C2E8..$C4C2 : result := 'M'; $C4C3..$C5B5 : result := 'N'; $C5B6..$C5BD : result := 'O'; $C5BE..$C6D9 : result := 'P'; $C6DA..$C8BA : result := 'Q'; $C8BB..$C8F5 : result := 'R'; $C8F6..$CBF9 : result := 'S'; $CBFA..$CDD9 : result := 'T'; $CDDA..$CEF3 : result := 'W'; $CEF4..$D188 : result := 'X'; $D1B9..$D4D0 : result := 'Y'; $D4D1..$D7F9 : result := 'Z'; else result := char(0); end; end;

sql语句汉字转拼音首字母

sql语句汉字转拼⾳⾸字母

(1)-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

create function GetPY(@str varchar(500))

returns varchar(500)

as

begin

declare @cyc int,@length int,@str1 varchar(100),@charcate varbinary(20)

set @cyc=1--从第⼏个字开始取

set @length=len(@str)--输⼊汉字的长度

set @str1=''--⽤于存放返回值

while @cyc<=1

begin

select @charcate=cast(substring(@str,@cyc,1) as varbinary)--每次取出⼀个字并将其转变成⼆进制,便于与GBK编码表进⾏⽐较

if @charcate>=0XB0A1 and @charcate<=0XB0C4

set @str1=@str1+'A'--说明此汉字的⾸字母为A,以下同上

else if @charcate>=0XB0C5 and @charcate<=0XB2C0

set @str1=@str1+'B'

else if @charcate>=0XB2C1 and @charcate<=0XB4ED

set @str1=@str1+'C'

else if @charcate>=0XB4EE and @charcate<=0XB6E9

set @str1=@str1+'D'

else if @charcate>=0XB6EA and @charcate<=0XB7A1

excel提取汉语简拼

excel提取汉语简拼

汉语简拼是一种将汉字通过拼音字母来表示的拼音输入法。在Excel中,我们可以使用一些方法来提取汉语简拼,并利用这些拼音来命名或分类数据,提高数据的整理和查找效率。

我们可以使用Excel的函数来提取汉字的拼音首字母。在Excel中,有一个函数叫做“LEFT”,它可以提取文本字符串的左边指定长度的字符。我们可以利用这个函数,将汉字转换成拼音首字母。例如,如果我们要提取汉字“汉”的拼音首字母,我们可以使用以下公式:

=LEFT(拼音函数, 1)

其中,“拼音函数”代表一个将汉字转换成拼音的函数,可以使用Excel的内置函数“=PINYIN(汉字)”来实现。将这个公式应用到一个指定的单元格,就可以得到汉字的拼音首字母。

我们可以利用提取出的汉语简拼来命名或分类数据。在Excel中,我们可以通过选择数据范围,然后点击“格式”->“条件格式”->“新建规则”,来为数据添加颜色标记。我们可以根据汉语简拼的首字母来设置不同的颜色,以便在查找和整理数据时更加方便。例如,我们可以将所有以“H”开头的汉字单元格标记为红色,以“Y”开头的汉字单元格标记为黄色,以此类推。

我们还可以利用提取出的汉语简拼来进行数据的筛选和排序。在Excel中,我们可以使用“筛选”功能来快速筛选符合条件的数据。我们可以选择一个数据范围,然后点击“数据”->“筛选”,在弹出的筛选窗口中选择“文本筛选”,然后选择“以...开头”或“以...结尾”的条件,输入汉语简拼的首字母,即可筛选出符合条件的数据。类似地,我们还可以使用“排序”功能来按照汉语简拼的首字母对数据进行排序,以便更加方便地查找和整理数据。

利用Excel提取汉语简拼可以提高数据整理和查找的效率。通过将汉字转换成拼音首字母,并将其用于命名、分类、标记、筛选和排序数据,我们可以更加方便地处理和管理大量的汉字数据。这种方法不仅简单易用,而且能够节省我们大量的时间和精力,提高工作效率。希望以上内容对您有所帮助,谢谢阅读!

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档