【sql server】英文按首字母排序+首字母相同英文排中文后面+数字开头最后+忽略空格影响

文章目录

    • 代码
    • 拓展

淦,sql server比oracle难用

按英文按首字母排序+首字母相同英文排中文后面+数字开头最后+忽略空格影响排序的意义多在于需对中文进行排序,例如:通讯录。

代码

思路是按名字的拼音或首字母(中文对应拼音,英文对应首字母)排序(如果是数字开头则把对应排序字段设贼搞如’zzzz’以达到数字排最后的效果),然后判断开头是中文还是英文,中文的相关排序字段优于英文(以达到英文排中午后面)

忽略空格影响用到的方法:

LTRIM()函数用于去掉字符串左边多余的空格。

LTRIM(character_expression)
//character_expression:字符或二进制数据表达式,可以是常量、变量或列。
//character_expression必须是可以隐式转换为varchar的数据类型,否则,需要使用CAST()函数显示转换改参数。

与之对应的是RTRIM(character_expression)用于去掉字符串右边多余的空格。
和TRIM(character_expression)用于去掉字符串左右两边多余的空格。(SQL Server 2017新增,低版本不支持)

select  BusinessCardFolderId,RealName,Mobile,Company,Job,Phone,Email,Address,Tags,Demanders,Remark,CreateTime,DeleteMark,EnabledMark,CreateDate,CreateUserId,ModifyDate,ModifyUserId,DeleteDate,DeleteUserId,OrganizeId,Name,FamilyName,Department,BusinessFax,BusinessWebSite,Partner,Origin from (
--非数字开头
select  * from (select  dbo.GetPY(ltrim(RealName)) ordername,
CAST(
	CASE  
		WHEN RealName LIKE '[a-z]%'
			THEN 2 
			ELSE 1 END AS int)as ChineseAndEnglishSorting ,* 
			from T_Info_OA_BusinessCardFolder where (RealName not LIKE '[0-9]%')) a
union all
--数字开头
select  * from (select  'zzzz' ordername,3 ChineseAndEnglishSorting,*   from T_Info_OA_BusinessCardFolder  where RealName LIKE '[0-9]%') b
) c
order by ordername,ChineseAndEnglishSorting,RealName
offset 30 rows 
FETCH NEXT 30 ROWS ONLY


原:
【sql server】英文按首字母排序+首字母相同英文排中文后面+数字开头最后+忽略空格影响_第1张图片
处理后:
【sql server】英文按首字母排序+首字母相同英文排中文后面+数字开头最后+忽略空格影响_第2张图片

拓展

【sql server】获取中文首字母函数
【C#】获取汉字拼音首字母和全拼

没有粉丝,没有评论,甚至连读者都没有。因为自己写的烂,因为自己水平有限,所以自己的作品一经发出就石沉大海了,得不到任何的回信,就好像自己写的东西是给自己看的。自己的作品怎么看都好像不够完美,全身的毛病,所以读者不喜欢也很正常对吧!

其实最让我开心的是有些读者们夸我文笔不错,或许是有人第一次这样夸我的缘故吧!又或许是我写的东西没什么人认可,我感受到了一种前所未有的激动,对于未来的憧憬,对自己写下去的动力。

因为有你们,我的写作之路才不孤独,因为有你们,我才能坚持到现在,如果有一天我真的写出圈了,或许我们可以整个交流会之类的,到时候促膝长谈。

“书山有路勤为径,学海无涯苦作舟。”写作苦是苦了点,整得我差点就想放弃了,不过还好有你们。我也不急着成功,因为没有个几十年如一日的坚持,哪能轻易成功?

茫茫文海无人意,天下有君识吾心。文海很孤独,但是有诸君,便足以令我至千里。

你可能感兴趣的:(#,数据库,sqlserver,数据库,排序,通讯录)