博客好久没更新了。公司事情多,所以很多时间给用在公司的事情上了。从进公司到现在,确确实实遇到很多的问题。后期一定会和大家多多分享。
先从最近的一件事情说起,公司信息管理部门,需要我统计一份用户真实姓名(User.TrueName)的数据,按如下方式统计。

1、 中文   数量
2、 英文  数量
3、 中文+英文  数量
4、 数字  数量
5、 数字+英文或+中文  数量

SQL Server 有通配符和正则两种方式,通配符匹配的关系一般都很简单。而正则可以解决大部分的问题。对于上面一种统计,我是按最基本的SQL写法来的。

View Code

USE SCM

DECLARE @index INT ,@End INT,@TrueName NVARCHAR(20),@UserID INT,@t_UserID INT,@CharLength INT
DECLARE @Digit INT,@Letter INT ,@Hanzi INT,@LetterAndHanzi INT,@DigitAndLetterOrHanzi INT

SET @index = 0
SET @UserID=0
SET @t_UserID = 0
SET @CharLength = 0
SET @Digit = 0
SET @Letter = 0 
SET @Hanzi = 0
SET @LetterAndHanzi = 0 
SET @DigitAndLetterOrHanzi = 0

SELECT @End=COUNT(1) FROM Users(NOLOCK) u WHERE u.TrueName <> ''
WHILE(@index < @End)
BEGIN
    DECLARE @LetterChar CHAR(2),@LetterIndex INT,@TempChar NVARCHAR(20)
    DECLARE @t_Digit INT,@t_Letter INT ,@t_Hanzi INT
    
    SET @LetterIndex = 1 
    SET @LetterChar=''
    SET @TempChar = ''
    SET @t_Digit = 0
    SET @t_Letter = 0
    SET @t_Hanzi = 0
    SELECT TOP 1 @TrueName=u.TrueName,@t_UserID=u.UserID FROM Users(nolock) u WHERE
               u.TrueName <> '' AND u.UserID>@UserID ORDER BY u.UserID 
               
               IF(@TrueName<>'')
               BEGIN
               --    PRINT @TrueName+'--------'+CAST(@t_UserID AS varchar)
               --    PRINT '@@'+CAST(@index  AS VARCHAR)
               SET @CharLength = LEN(@TrueName)
               --WHERE
               IF(@CharLength>0)
               BEGIN
                    WHILE(@LetterIndex<=@CharLength)
                    BEGIN
                        SET @LetterChar=SUBSTRING(@TrueName,@LetterIndex,1)
                        --SET @TempChar = @TempChar+@LetterChar+'-'
                        --分析单个字符
                        DECLARE @Unicode INT
                        SET @Unicode = UNICODE(@LetterChar)
                        SET @LetterIndex=@LetterIndex+1
                        IF @Unicode BETWEEN 48 AND 57
                        BEGIN
                            --数字
                            SET @t_Digit=@t_Digit+1
                            CONTINUE
                        END
                        
                        IF @Unicode BETWEEN 65 AND 90
                        BEGIN
                            --字母
                            SET @t_Letter =@t_Letter +1
                            CONTINUE
                        END
                        
                        IF @Unicode BETWEEN 97 AND 122
                        BEGIN
                            --字母
                            SET @t_Letter =@t_Letter +1
                            CONTINUE
                        END
                        
                        IF @Unicode > 127
                        BEGIN
                            --汉字
                            SET @t_Hanzi =@t_Hanzi + 1
                            CONTINUE
                        END
        
                        
                    END
                                    
                    
                    --PRINT CAST(@t_UserID AS varchar)+'-->'+@TrueName+'-->'+@TempChar
               END
               
               IF @t_Digit=@CharLength
               BEGIN
                    SET @Digit = @Digit+1
               END
               
               IF @t_Letter=@CharLength
               BEGIN
                    --PRINT @TrueName +'-->>' + CAST(@CharLength AS VARCHAR) 
                    SET @Letter = @Letter+1
               END
               
               IF @t_Hanzi=@CharLength
               BEGIN
                    SET @Hanzi = @Hanzi+1
               END
               
               IF ( @t_Letter <> 0 AND @t_Hanzi<> 0) AND @t_Letter+@t_Hanzi=@CharLength
               BEGIN
                    SET @LetterAndHanzi = @LetterAndHanzi+1
               END
               
                IF ( (@t_Digit <>  0 AND @t_Letter <> 0) AND ( @t_Digit+@t_Letter=@CharLength )) OR ( ( @t_Digit <>  0 AND @t_Hanzi <> 0) AND ( @t_Digit + @t_Hanzi = @CharLength) ) OR ( (@t_Digit <> 0 AND @t_Letter <> 0 AND @t_Hanzi <> 0 ) AND (@t_Digit+@t_Letter+@t_Hanzi =@CharLength))
               BEGIN
                    SET @DigitAndLetterOrHanzi = @DigitAndLetterOrHanzi+1
               END
               
               SET @CharLength = 0
               SET @TempChar = ''
               SET @t_Digit=0
               SET @t_Letter=0
               SET @t_Hanzi=0
         
               END
               
    SET @index=@index+1
    SET @UserID=@t_UserID
END

PRINT '中文:'+ cast(@Hanzi as VARCHAR)
PRINT '英文:'+ cast(@Letter as    VARCHAR)
PRINT '中文+英文:'+ cast(@LetterAndHanzi as    VARCHAR)
PRINT '数字:'+ cast(@Digit as VARCHAR)
PRINT '数字+英文或+中文:'+ cast(@DigitAndLetterOrHanzi as varchar)

转载于:https://www.cnblogs.com/yoolonet/archive/2012/02/20/2358820.html

SQL Unicode相关推荐

  1. sql unicode转中文_SELECT语句《SQL必知必会》

    数据库中有哪些数据类型? 数据库中最常用对数据类型有三种:Text(文本).Number(数字)和 Date/Time. 文本类型:即字符串,如"nameasdas" 数字类型:十 ...

  2. sql unicode转中文_汉字转拼音的Java类库 JPinyin

    JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性] 1.准确.完善的字库: Unicode编码从4E00-9FA5范围及3007 ...

  3. sql数据类型_SQL数据类型

    sql数据类型 SQL Data Types define the type of value that can be stored in a table column. For example, i ...

  4. java 必备面试必备

    1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...

  5. python基础笔记1.1

    执行Python程序 #告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器. #!/usr/bin/python print("Hello, World!&q ...

  6. Python升级之路 (Lv2 ) Python基本概念

    Python系列文章目录 第一章 Python 入门 第二章 Python基本概念 Python基本概念 Python系列文章目录 前言 一.Python 基础 1. Python组成和缩进 2. 对 ...

  7. SQL 中的unicode字符

    要将字符转换成unicode字符以显示某些符号,可以在字符串前加N,如: select N'♧♡♂♀♠♣♥❤☜☞☎☏ ' 转载于:https://www.cnblogs.com/Laro/archiv ...

  8. SQL 中 unicode字符和非unicode字符的区别

    unicode字符就是一些标准的字符,例如英文.数字,不支持汉字. 非unicode是包含汉字和一些特殊字符 nvarchar支持汉字,但是每一个字符占用两个字节 比如有这样的字段:[Name] [n ...

  9. 服务器维护实用工具(Unicode)版本,修复SQL Server 2000数据库之实战经验

    1.故障爆发: 2003-12-26 13:00 客户报告所有的POS死机和SERVER运行速度非常的慢.经过重新启动服务器(启动到检查RAID卡时开始报警)我们发现在WINDEOWS 2000 SE ...

  10. SQL 全角半角转换-(摘抄)

    /****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @fl ...

最新文章

  1. Qt 使用#define+qDebug()输出调试信息
  2. 谷歌提出新型卷积网络EfficientNet: 推理速度升5.1倍参数减少88%,需要我们的验证
  3. 想咸鱼翻身不粘锅?加油
  4. Marketing Cloud Launchpad动态tile显示数字刷新的触发逻辑
  5. 博人眼球的 电子苍蝇
  6. 朱邦芬院士:我所熟悉的几位中国物理学大师的为人之本
  7. AliExpress智能营销引擎大揭秘 - AnalyticDB如何做到快准狠省
  8. [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析
  9. 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
  10. 软件测试文档测试用例,软件测试用例文档模板(带实例)
  11. SJIS_DBC_TO_SBC小例子
  12. 软件项目管理 1.2.PMBOK与软件项目管理知识体系
  13. 高等数学期末复习——知识点梳理
  14. struggle in SVS Caffe environment
  15. 田野调查手记·浮山摩崖石刻(九)
  16. 数字图像处理(3) — 基于白平衡的人脸美白算法
  17. 黄金思维圈,看透问题本质的利器,成功者必备工具
  18. JSF标签详解(全)
  19. 【Linux】修改腾讯云轻量应用服务器的hostname
  20. d3.js:取代d3.mouse的d3.pointer

热门文章

  1. ios input框输入白屏
  2. ZOJ 3511 Cake Robbery
  3. GridView冻结列的实现
  4. C#信息采集系统,常见控件练习
  5. 序列化和反序列化(二)——Serializable 接口
  6. ZooKeeper的安装、配置、启动和使用(一)——单机模式
  7. java实现栈的方法
  8. qt设置文本背景透明_QT QWidget设置窗体透明度方法汇总
  9. 使用jdk1.8 新特性stream实现多级分类
  10. myeclipse java设置_【使用指南】MyEclipse部署配置(多图)