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' 
		。
		。
		。
		。
相关推荐
stark张宇1 小时前
MySQL 核心内幕:从索引原理、字段选型到日志机制与外键约束,一篇打通数据库任督二脉
数据库·mysql·架构
倔强的石头_1 小时前
融合数据库架构实践:关系型、JSON与全文检索的“一库多能”深度解析
数据库
星辰员3 小时前
KingbaseES数据库:ksql 命令行用户与权限全攻略,从创建到删除
数据库
华仔啊16 小时前
千万别给数据库字段加默认值 null!真的会出问题
java·数据库·后端
随风飘的云2 天前
MySQL的慢查询优化解决思路
数据库
IvorySQL2 天前
PostgreSQL 技术日报 (3月7日)|生态更新与内核性能讨论
数据库·postgresql·开源
赵渝强老师2 天前
【赵渝强老师】金仓数据库的数据文件
数据库·国产数据库·kingbase·金仓数据库
随逸1772 天前
《Milvus向量数据库从入门到实战,手把手搭建语义检索系统》
数据库
神秘的猪头2 天前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm
IvorySQL3 天前
PostgreSQL 技术日报 (3月6日)|为什么 Ctrl-C 在 psql 里让人不安?
数据库·postgresql·开源