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⾃动⽣成汉语拼⾳和⾸字母函数
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数据库默认使用的是二进制排序规则,无法直接进行中文排序。不过,可以通过以下步骤实现中文排序:
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提供了多种方法来截取字符串的前几位。以下是几种常见的方法:
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标量值函数:返回汉字拼⾳⾸拼
今天遇到⼀个需求,客户要求在系统客户端选择客户的时候,可以⽤拼⾳⾸拼去快速过滤选择,此时我们在客户表⾥⾯加多⼀个
拼⾳⾸拼字段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函数
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提取汉语简拼可以提高数据整理和查找的效率。通过将汉字转换成拼音首字母,并将其用于命名、分类、标记、筛选和排序数据,我们可以更加方便地处理和管理大量的汉字数据。这种方法不仅简单易用,而且能够节省我们大量的时间和精力,提高工作效率。希望以上内容对您有所帮助,谢谢阅读!
