实现通讯录首字母分组的sql语句.麻烦进来看看

CzpCtrl 2016-08-12 05:06:37



目前数据表里面没有单独一个字段用来储存字母,由于数据有一部分来源是导入的,所以也不能考虑加字段.需根据名称来分组,然后展示.大家帮忙看看.
...全文
496 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CzpCtrl 2016-08-24
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
找到一个直接拿去用就行


CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @py TABLE(
ch char(1),
hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
INSERT @py SELECT 'A',N'吖',N'鏊'
UNION ALL SELECT 'B',N'八',N'簿'
UNION ALL SELECT 'C',N'嚓',N'错'
UNION ALL SELECT 'D',N'哒',N'跺'
UNION ALL SELECT 'E',N'屙',N'贰'
UNION ALL SELECT 'F',N'发',N'馥'
UNION ALL SELECT 'G',N'旮',N'过'
UNION ALL SELECT 'H',N'铪',N'蠖'
UNION ALL SELECT 'J',N'丌',N'竣'
UNION ALL SELECT 'K',N'咔',N'廓'
UNION ALL SELECT 'L',N'垃',N'雒'
UNION ALL SELECT 'M',N'妈',N'穆'
UNION ALL SELECT 'N',N'拿',N'糯'
UNION ALL SELECT 'O',N'噢',N'沤'
UNION ALL SELECT 'P',N'趴',N'曝'
UNION ALL SELECT 'Q',N'七',N'群'
UNION ALL SELECT 'R',N'蚺',N'箬'
UNION ALL SELECT 'S',N'仨',N'锁'
UNION ALL SELECT 'T',N'他',N'箨'
UNION ALL SELECT 'W',N'哇',N'鋈'
UNION ALL SELECT 'X',N'夕',N'蕈'
UNION ALL SELECT 'Y',N'丫',N'蕴'
UNION ALL SELECT 'Z',N'匝',N'做'
DECLARE @i int
SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
FROM @py
WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
RETURN(@str)
END
GO
SELECT LEN(LEFT(姓名,1)) AS 首字母 FROM dbo.TabName


引用 2 楼 roy_88 的回复:
找到一个直接拿去用就行


CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @py TABLE(
ch char(1),
hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
INSERT @py SELECT 'A',N'吖',N'鏊'
UNION ALL SELECT 'B',N'八',N'簿'
UNION ALL SELECT 'C',N'嚓',N'错'
UNION ALL SELECT 'D',N'哒',N'跺'
UNION ALL SELECT 'E',N'屙',N'贰'
UNION ALL SELECT 'F',N'发',N'馥'
UNION ALL SELECT 'G',N'旮',N'过'
UNION ALL SELECT 'H',N'铪',N'蠖'
UNION ALL SELECT 'J',N'丌',N'竣'
UNION ALL SELECT 'K',N'咔',N'廓'
UNION ALL SELECT 'L',N'垃',N'雒'
UNION ALL SELECT 'M',N'妈',N'穆'
UNION ALL SELECT 'N',N'拿',N'糯'
UNION ALL SELECT 'O',N'噢',N'沤'
UNION ALL SELECT 'P',N'趴',N'曝'
UNION ALL SELECT 'Q',N'七',N'群'
UNION ALL SELECT 'R',N'蚺',N'箬'
UNION ALL SELECT 'S',N'仨',N'锁'
UNION ALL SELECT 'T',N'他',N'箨'
UNION ALL SELECT 'W',N'哇',N'鋈'
UNION ALL SELECT 'X',N'夕',N'蕈'
UNION ALL SELECT 'Y',N'丫',N'蕴'
UNION ALL SELECT 'Z',N'匝',N'做'
DECLARE @i int
SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
FROM @py
WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
RETURN(@str)
END
GO
SELECT LEN(LEFT(姓名,1)) AS 首字母 FROM dbo.TabName


请问这里的1该替换成什么值啊
中国风 2016-08-24
  • 打赏
  • 举报
回复
1--取第1个字 姓氏,如果有复姓时,你必须用一个列单独存储姓氏
中国风 2016-08-12
  • 打赏
  • 举报
回复
找到一个直接拿去用就行
CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
	DECLARE @py TABLE(
		ch char(1),
		hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
		hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
	INSERT @py SELECT 'A',N'吖',N'鏊'
	UNION  ALL SELECT 'B',N'八',N'簿'
	UNION  ALL SELECT 'C',N'嚓',N'错'
	UNION  ALL SELECT 'D',N'哒',N'跺'
	UNION  ALL SELECT 'E',N'屙',N'贰'
	UNION  ALL SELECT 'F',N'发',N'馥'
	UNION  ALL SELECT 'G',N'旮',N'过'
	UNION  ALL SELECT 'H',N'铪',N'蠖'
	UNION  ALL SELECT 'J',N'丌',N'竣'
	UNION  ALL SELECT 'K',N'咔',N'廓'
	UNION  ALL SELECT 'L',N'垃',N'雒'
	UNION  ALL SELECT 'M',N'妈',N'穆'
	UNION  ALL SELECT 'N',N'拿',N'糯'
	UNION  ALL SELECT 'O',N'噢',N'沤'
	UNION  ALL SELECT 'P',N'趴',N'曝'
	UNION  ALL SELECT 'Q',N'七',N'群'
	UNION  ALL SELECT 'R',N'蚺',N'箬'
	UNION  ALL SELECT 'S',N'仨',N'锁'
	UNION  ALL SELECT 'T',N'他',N'箨'
	UNION  ALL SELECT 'W',N'哇',N'鋈'
	UNION  ALL SELECT 'X',N'夕',N'蕈'
	UNION  ALL SELECT 'Y',N'丫',N'蕴'
	UNION  ALL SELECT 'Z',N'匝',N'做'
	DECLARE @i int
	SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
	WHILE @i>0
		SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
			,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
		FROM @py
		WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
	RETURN(@str)
END
GO
SELECT LEN(LEFT(姓名,1)) AS 首字母 FROM dbo.TabName
中国风 2016-08-12
  • 打赏
  • 举报
回复
数据量不大,用个函数取首字母 反之 用一个本栏位记录首字母 百度一下一堆 我的BLOG放有生成拼音你可参照 http://blog.csdn.net/roy_88/article/details/8772631

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧