mysql获得以s开头_mysql和SqlServer 中取得汉字字段的各汉字首字母

DELIMITER ;;

CREATE  FUNCTION `getPY`(in_string VARCHAR(65534)) RETURNS mediumtext CHARSET utf8

BEGIN

DECLARE tmp_str VARCHAR(65534) charset gbk DEFAULT '' ; #截取字符串,每次做截取后的字符串存放在该变量中,初始为函数参数in_string值

DECLARE tmp_len SMALLINT DEFAULT 0;#tmp_str的长度

DECLARE tmp_char VARCHAR(2) charset gbk DEFAULT '';#截取字符,每次 left(tmp_str,1) 返回值存放在该变量中

DECLARE tmp_rs VARCHAR(65534) charset gbk DEFAULT '';#结果字符串

DECLARE tmp_cc VARCHAR(2) charset gbk DEFAULT '';#拼音字符,存放单个汉字对应的拼音首字符

SET tmp_str = in_string;#初始化,将in_string赋给tmp_str

SET tmp_len = LENGTH(tmp_str);#初始化长度

WHILE tmp_len > 0 DO #如果被计算的tmp_str长度大于0则进入该while

SET tmp_char = LEFT(tmp_str,1);#获取tmp_str最左端的首个字符,注意这里是获取首个字符,该字符可能是汉字,也可能不是。

SET tmp_cc = tmp_char;#左端首个字符赋值给拼音字符

IF LENGTH(tmp_char)>1 THEN#判断左端首个字符是多字节还是单字节字符,要是多字节则认为是汉字且作以下拼音获取,要是单字节则不处理。

SELECT ELT(INTERVAL(CONV(HEX(tmp_char),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0xBFA6,0xC0AC

,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA ,0xCEF4,0xD1B9,0xD4D1),

'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z') INTO tmp_cc; #获得汉字拼音首字符

END IF;

SET tmp_rs = CONCAT(tmp_rs,tmp_cc);#将当前tmp_str左端首个字符拼音首字符与返回字符串拼接

SET tmp_str = SUBSTRING(tmp_str,2);#将tmp_str左端首字符去除

SET tmp_len = LENGTH(tmp_str);#计算当前字符串长度

END WHILE;

RETURN tmp_rs;#返回结果字符串

END;;

DELIMITER ;

效果图:

950552f92655fa3b04ddb2bd2e750954.png

--将中文字符串转化成文字首拼音的组合

create function dbo.fun_getPY(@str nvarchar(4000))

returns nvarchar(4000)

as

begin

declare @word nchar(1),@PY nvarchar(4000)

set @PY=''

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 PY from (

select 'A' as PY,N'骜' as word

union all select 'B',N'簿'

union all select 'C',N'错'

union all select 'D',N'鵽'

union all select 'E',N'樲'

union all select 'F',N'鳆'

union all select 'G',N'腂'

union all select 'H',N'夻'

union all select 'J',N'攈'

union all select 'K',N'穒'

union all select 'L',N'鱳'

union all select 'M',N'旀'

union all select 'N',N'桛'

union all select 'O',N'沤'

union all select 'P',N'曝'

union all select 'Q',N'囕'

union all select 'R',N'鶸'

union all select 'S',N'蜶'

union all select 'T',N'箨'

union all select 'W',N'鹜'

union all select 'X',N'鑂'

union all select 'Y',N'韵'

union all select 'Z',N'咗'

) T

where word>=@word collate Chinese_PRC_CS_AS_KS_WS

order by PY ASC) else @word end)

set @str=right(@str,len(@str)-1)

end

return @PY

end

GO

效果图

38b044fd7cc3a96b2d8568ef9092d7af.png

很实用的两个自定义函数,积累总是一点一点的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您的问题,我可以提供一种可能的Python代码实现方式,具体如下: ```python import pyodbc import mysql.connector import schedule import time # 连接mysql数据库 mysql_conn = mysql.connector.connect( host="localhost", user="root", password="password", database="test_db" ) # 连接SqlServer数据库 sqlserver_conn = pyodbc.connect( "Driver={SQL Server};" "Server=server_name;" "Database=db_name;" "Trusted_Connection=yes;" ) # 查询mysql的t_recruitment_position表 mysql_cursor = mysql_conn.cursor() mysql_cursor.execute("SELECT * FROM t_recruitment_position") mysql_result = mysql_cursor.fetchall() # 删除SqlServer的t_position_info表 sqlserver_cursor = sqlserver_conn.cursor() sqlserver_cursor.execute("DROP TABLE t_position_info") # 新建一个t_position_info表 sqlserver_cursor.execute("CREATE TABLE t_position_info (id INT, position_name VARCHAR(255), salary INT)") # 将t_recruitment_position内的数据更改字段名插入到新的t_position_info表 for row in mysql_result: position_id = row[0] position_name = row[1] salary = row[2] sqlserver_cursor.execute("INSERT INTO t_position_info (id, position_name, salary) VALUES (?, ?, ?)", position_id, position_name, salary) # 关闭数据库连接 mysql_conn.close() sqlserver_conn.close() # 设置定时任务,每天执行一次 schedule.every().day.at("00:00").do(job) def job(): # 连接mysql数据库 mysql_conn = mysql.connector.connect( host="localhost", user="root", password="password", database="test_db" ) # 连接SqlServer数据库 sqlserver_conn = pyodbc.connect( "Driver={SQL Server};" "Server=server_name;" "Database=db_name;" "Trusted_Connection=yes;" ) # 查询mysql的t_recruitment_position表 mysql_cursor = mysql_conn.cursor() mysql_cursor.execute("SELECT * FROM t_recruitment_position") mysql_result = mysql_cursor.fetchall() # 删除SqlServer的t_position_info表 sqlserver_cursor = sqlserver_conn.cursor() sqlserver_cursor.execute("DROP TABLE t_position_info") # 新建一个t_position_info表 sqlserver_cursor.execute("CREATE TABLE t_position_info (id INT, position_name VARCHAR(255), salary INT)") # 将t_recruitment_position内的数据更改字段名插入到新的t_position_info表 for row in mysql_result: position_id = row[0] position_name = row[1] salary = row[2] sqlserver_cursor.execute("INSERT INTO t_position_info (id, position_name, salary) VALUES (?, ?, ?)", position_id, position_name, salary) # 关闭数据库连接 mysql_conn.close() sqlserver_conn.close() # 循环执行定时任务 while True: schedule.run_pending() time.sleep(1) ``` 这段代码实现了连接mysqlSqlServer数据库,查询mysql的t_recruitment_position表和删除SqlServer的t_position_info表再新建一个t_position_info表,将t_recruitment_position内的数据更改字段名插入到新的t_position_info表,并且将以上操作做成每天执行的定时任务。但是请注意,这段代码仅仅是一种实现方式,具体实现方式还需要根据您的实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值