set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
--/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/
--declare @pagecount int declare @counts int
--exec proc_fun_pagination 'sys_user','*',2,2,'userid',0,null,'userid',0--,@pagecount output,@counts output
ALTER PROCEDURE [dbo].[proc_fun_Pagination]
(
@tblName nvarchar(200), ----要显示的表或多个表的连接
@fldName nvarchar(500) = '*', ----要显示的字段列表
@pageSize int = 10, ----每页显示的记录个数
@page int = 1, ----要显示那一页的记录
@fldSort nvarchar(200) = null, ----排序字段列表或条件
@Sort bit = 0, ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
@strCondition nvarchar(1000) = null, ----查询条件,不需where
@ID nvarchar(150), ----主表的主键
@Dist bit = 0, ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
@pageCount int = 1 output, ----查询结果分页后的总页数
@Counts int = 1 output ----查询到的记录数
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000) ----存放动态生成的SQL语句
Declare @strTmp nvarchar(1000) ----存放取得查询结果总数的查询语句
Declare @strID nvarchar(1000) ----存放取得查询开头或结尾ID的查询语句
Declare @strSortType nvarchar(10) ----数据排序规则A
Declare @strFSortType nvarchar(10) ----数据排序规则B
Declare @SqlSelect nvarchar(50) ----对含有DISTINCT的查询进行SQL构造
Declare @SqlCounts nvarchar(50) ----对含有DISTINCT的总数查询进行SQL构造
--declare @timediff datetime --耗时测试时间差
--select @timediff=getdate()
if @Dist = 0
begin
set @SqlSelect = 'select '
set @SqlCounts = 'Count(*)'
end
else
begin
set @SqlSelect = 'select distinct '
set @SqlCounts = 'Count(DISTINCT '+@ID+')'
end
if @Sort=0
begin
set @strFSortType=' ASC '
set @strSortType=' DESC '
end
else
begin
set @strFSortType=' DESC '
set @strSortType=' ASC '
end
--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
set @sqlTmp = @fldName + ' From ' + @tblName
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
set @strID = ' From ' + @tblName
end
else
begin
set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
end
----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
set @tmpCounts = 1
else
set @tmpCounts = @Counts
--取得分页总数
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize
/**//**当前页大于总页数 取最后一页**/
if @page>@pageCount
set @page=@pageCount
--/*-----数据分页2分处理-------*/
declare @pageIndex int --总数/页大小
declare @lastcount int --总数%页大小
set @pageIndex = @tmpCounts/@pageSize
set @lastcount = @tmpCounts%@pageSize
if @lastcount > 0
set @pageIndex = @pageIndex + 1
else
set @lastcount = @pagesize
--//***显示分页
if @strCondition is null or @strCondition='' --没有设置显示条件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
begin
if @page=1
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' order by '+ @fldSort +' '+ @strFSortType
else
begin
if @Sort=1
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' <(select min('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
+' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' >(select max('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
+' order by '+ @fldSort +' '+ @strFSortType
end
end
end
else
begin
set @page = @pageIndex-@page+1 --后半部分数据处理
if @page <= 1 --最后一页数据显示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
if @Sort=1
begin
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' >(select max('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' <(select min('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end
end
else --有查询条件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分数据处理
begin
if @page=1
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where 1=1 ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType
else if(@Sort=1)
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' <(select min('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1=1) ' + @strCondition +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
+' '+ @strCondition +' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' >(select max('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1=1) ' + @strCondition +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
+' '+ @strCondition +' order by '+ @fldSort +' '+ @strFSortType
end
end
else
begin
set @page = @pageIndex-@page+1 --后半部分数据处理
if @page <= 1 --最后一页数据显示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else if(@Sort=1)
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' >(select max('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
+' '+ @strCondition+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' <(select min('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
+' '+ @strCondition+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end
------返回查询结果-----
exec sp_executesql @strTmp
--select datediff(ms,@timediff,getdate()) as 耗时
--print @strTmp
SET NOCOUNT OFF
--------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
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
select dbo.fun_getPY('徐希望')
发表评论
-
清除表,存储过程
2010-12-02 17:20 733清除表 --declare @tname var ... -
BCP
2010-09-16 16:10 795bcp trial_dwh.dbo.MyBi_Field ... -
sql相关
2010-07-20 10:00 6731. SQL基本调整1.1. SQ ... -
sql执行顺序
2010-07-20 09:57 1113一、sql语句的执行步骤:1)语法分析,分析语句的语法是否符合 ... -
sql行列转换
2008-11-04 10:53 1074Create table #T (Class varcha ... -
split
2008-11-04 10:50 815create table # (a varch ... -
SQL function
2008-09-29 16:04 1448SQL 函数 函数大全 SQL ... -
cursor,transaction
2008-09-22 14:24 828cursor: DECLARE MyCURSOR1 CURS ... -
SQL server中convert data函数大全
2008-05-08 17:46 2058SQL server中convert函数大全 语句及查询结果: ... -
SQL快捷键
2008-05-05 13:40 1373编辑:注释代码。 CTRL+SHIFT+C ...
相关推荐
这种技术的目的是为了提高用户在大量中文信息中寻找特定条目的效率,因为它允许用户通过输入联系人姓名的拼音首字母来快速定位目标。 在实现这个功能时,首先需要对中文姓名进行拼音转换。这通常涉及到汉字到拼音的...
在这个H5通讯录中,系统会对每个联系人的姓名进行拼音处理,然后根据拼音首字母进行分类,用户可以通过点击首字母来快速定位到相应的联系人。 实现这个功能,我们需要以下关键技术: 1. **拼音库**:H5页面需要一...
3. **首字母提示**:在通讯录应用中,通常会根据联系人姓名的首字母进行分组,便于用户快速定位。实现这一功能需要对列表数据进行排序,并在侧边栏(也称为抽屉或快速选择器)中显示每个字母,用户点击字母时会跳转...
在联系人列表中,按联系人姓名的首字母进行分类是一种常见的组织方式。这种设计使得用户能够快速找到特定联系人,特别是在大量联系人的情况下。实现时,通常会先对联系人列表进行排序,然后按照每个联系人名字的首...
通过比较用户输入的首字母和联系人姓名的首字母,筛选出匹配项。然后,使用`$.append()`或`html()`方法更新列表区域,展示匹配的联系人。 此外,CSS文件用于定义界面的样式。比如,它可能设置了输入框的外观、列表...
本示例主要关注如何实现这些特性,包括根据联系人姓名的首字母进行分组显示,利用侧滑字母表实现快速定位,以及优化ListView的滚动性能。 首先,我们要理解联系人分章节显示的概念。这是通过将联系人数据按照首字母...
在这个项目中,开发者可能使用了JavaScript数组的sort()方法,根据对象数组中的特定字段(如姓名或关键词)的首字母进行排序。在中文环境中,需要处理汉字的拼音首字母,这通常涉及到JavaScript库如pinyin.js,它...
3. **排序逻辑**:利用JavaScript,对联系人列表进行排序,根据姓名的首字母进行升序排列。Vue.js 的 computed 属性可以用于实时计算排序后的列表。 4. **问题修复**:“小bug”可能指的是排序不正确,或者点击字母...
7. **适配多语言**:考虑到不同地区的用户,字母检索可能需要支持全角字符(如中文姓名的拼音首字母)和非拉丁字母(如俄语、希腊语等)。 通过上述分析,我们可以看出,"通讯录字母检索功能源码"涵盖了数据结构...
在本文中,我们将深入探讨如何使用Vue.js框架和H5技术来创建一个仿微信通讯录功能,该功能包括按字母和汉字首字母分类排序、页面滚动、拼音首字母搜索以及处理特殊字符。这个项目的核心是根据JavaScript文件中的数据...
《CM7最新联系人代码解析:自动IP拨号与拼音首字母检索技术详解》 在Android系统中,联系人管理是用户日常操作的核心部分之一。CM7,作为一款基于Android的深度定制系统,其在联系人功能上进行了一系列优化,为用户...
3. **排序算法**:对ListView的数据源(通常是ArrayList)进行遍历,使用拼音库计算每个元素的首字母,并将其保存到对应字段。然后可以使用Java的`Collections.sort()`方法,提供自定义比较器(Comparator)来根据...
对于快速索引条的显示,可以利用`OnGlobalLayoutListener`监听整个列表的布局完成,然后遍历联系人列表,统计每个首字母出现的次数,将其绘制到快速索引条上。这样可以确保快速索引条的高度与实际需要的大小相符,...
Comparator的compare()方法需要比较两个联系人名字的首字母,确保它们按照字母顺序排列。 为了实现字母右侧A~Z的检索功能,我们可以创建一个侧边栏(通常称为字母栏或快速索引栏)。当用户点击某个字母时,应用会...
这个项目旨在实现一个功能齐全、用户体验良好的好友列表界面,其中包括搜索、滚动以及按首字母排序等特性。以下是关于这个项目的详细知识点: 1. **ListView与RecyclerView**: - 为了实现好友列表的展示,开发者...
2. **数据结构与排序**:在实现这一功能时,开发者需要将联系人数据按姓名的首字母顺序进行排序。这可能涉及到数据库查询优化,例如在数据库表中创建一个基于姓名的索引,以便快速地按照字母顺序获取联系人。 3. **...
Adapter需要知道如何获取每个条目的首字母,并根据首字母更新头部视图。 **实现步骤:** 1. **创建字母栏布局**:使用LinearLayout或HorizontalScrollView创建一个包含所有字母的布局。 2. **设置点击事件**:为...
1. **计算首字母**:首先,我们需要对所有联系人姓名进行预处理,获取每个名字的首字母。考虑到中文姓名,我们可以使用Pinyin4j库将汉字转换为拼音,然后提取首字母。 2. **创建索引**:将所有首字母按字母顺序排列...
1. `picker`选择器:用户可以选择联系人首字母,快速定位到相应区域。 2. `view`视图:显示联系人列表,每个联系人作为一个独立的`view`项。 3. `text`文本:展示联系人的姓名、电话等信息。 4. `button`按钮:可能...
这种设计灵感来源于传统的电话簿,人们可以通过查看字母表来快速定位到特定的姓名首字母,从而找到对应的联系人。在数字化的现代应用中,这一功能被巧妙地移植到了屏幕的右侧,以滚动的字母条形式呈现,用户只需轻轻...