SQLServer数据库使用Function实现根据字段内容的拼音首字母进行数据查询

实现SQL首字母查询分两步,第一步建Function,第二步引用新建的Function。

1. 首先需要自定义一个查询的Function,详细SQL如下:

sql 复制代码
ALTER function [dbo].[GetDataByPY](@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

2. 使用GetDataByPY进行数据查询,其中,SQL中的数字表示根据前几位字符串的首字母去匹配,后面的字符串就代表查询的首字母了,例如:

sql 复制代码
SELECT * FROM <font color=red>表名</font>
WHERE LEFT(dbo.FuncSysGetPY(<font color=red>字段名</font>), 1) = 'a' 

SELECT * FROM <font color=red>表名</font>
WHERE LEFT(dbo.FuncSysGetPY(<font color=red>字段名</font>), 2) = 'ab' 

SELECT * FROM <font color=red>表名</font>
WHERE LEFT(dbo.FuncSysGetPY(<font color=red>字段名</font>), 3) = 'abc' 
		。
		。
		。
		。
相关推荐
史蒂芬_丁17 分钟前
Qt, C++数据类型扩展问题
数据库·c++·qt
lpfasd12324 分钟前
MariaDB Docker容器权限配置问题分析与解决方案
数据库·docker·mariadb
Yvonne爱编码2 小时前
数据库---Day2 数据库操作
数据库
BduL OWED3 小时前
Redis之Redis事务
java·数据库·redis
星星也在雾里3 小时前
Dify Agent + FastAPI + PostgreSQL实现数据库查询
数据库·人工智能·fastapi
TDengine (老段)3 小时前
以事件为核心 + 以资产为核心:工业数据中缺失的关键一环
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
r_oo_ki_e_3 小时前
快速复习mysql
数据库·mysql
huabiangaozhi3 小时前
修改表字段属性,SQL总结
java·数据库·sql
IvorySQL4 小时前
第 6 次执行后,PostgreSQL 执行计划为何突变?
数据库·postgresql·开源
小文大数据4 小时前
python实现HTML转PDF
java·前端·数据库