zoukankan      html  css  js  c++  java
  • SQL 笔记

    1、根据数字转换成大写如:123=》一二三

    /*
    Desc:将数字转换为大写   123=》一二三
                    123=》一百二十三(需要拓展)
    Email:gametheworld@126.com
    Author:叶康
    UpdateDate:2015-12-10 13:34:06.160
    QQ:865252662
    select getdate()
    */
    CREATE FUNCTION [dbo].[Fn_NumberConvertChinase](@number NVARCHAR(50))
    RETURNS NVARCHAR(20)
    AS
    BEGIN
    DECLARE @res NVARCHAR(20)
    DECLARE @char CHAR(1)
    SET @res = ''
    SET @char = substring(@number,1,1)
    SELECT @res = (CASE @char
        WHEN '1' THEN ''
        WHEN '2' THEN ''
        WHEN '3' THEN ''
        WHEN '4' THEN ''
        WHEN '5' THEN ''
        WHEN '6' THEN ''
        WHEN '7' THEN ''
        WHEN '8' THEN ''
        WHEN '9' THEN ''
        WHEN '0' THEN ''
        ELSE substring(@number,1,1) END 
    )
    IF(len(@number) > 1)
    BEGIN
        SET @res =  @res + dbo.fn_numberconvertchinase(substring(@number,2,len(@number)-1))
    END
    RETURN @res 
    END

    2、获取文字的首个字母

    /*
    Desc:获取文字的首个字母
        会调用上面根据数字转换大写Function
    Email:gametheworld@126.com
    Author:叶康
    UpdateDate:2015-12-10 17:30:33.813
    QQ:865252662
    select getdate()
    */
    CREATE function fun_getPY(@str nvarchar(4000)) 
    returns nvarchar(4000) 
    as
    begin
        DECLARE @strlen INT;
        DECLARE @re NVARCHAR(4000);
        --字符中数字转大写
        SELECT @str=dbo.fn_numberconvertchinase(@str);
        
        DECLARE @t table(chr nchar(1) collate Chinese_PRC_CI_AS,letter nchar(1))
        INSERT INTO @t(chr,letter)
          SELECT '','A' UNION ALL SELECT '','B' UNION ALL
          SELECT '','C' UNION ALL SELECT '','D' UNION ALL
          SELECT '','E' UNION ALL SELECT '','F' UNION ALL
          SELECT '','G' UNION ALL SELECT '','H' UNION ALL
          SELECT '','J' UNION ALL SELECT '','K' UNION ALL
          SELECT '','L' UNION ALL SELECT '','M' UNION ALL
          SELECT '','N' UNION ALL SELECT '','O' UNION ALL
          SELECT '','P' UNION ALL SELECT '','Q' UNION ALL
          SELECT '','R' UNION ALL SELECT '','S' UNION ALL
          SELECT '','T' UNION ALL SELECT '','W' UNION ALL
          SELECT '','X' UNION ALL SELECT '','Y' UNION ALL
          SELECT '','Z';
          SELECT @strlen=len(@str),@re='';
      
          WHILE @strlen>0
          BEGIN
            SELECT TOP 1 @re=letter+@re,@strlen=@strlen-1
              FROM @t a WHERE chr<=substring(@str,@strlen,1)
              ORDER BY chr DESC
            IF @@rowcount=0
              SELECT @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1
          END
      RETURN(UPPER(@re))
    END

    3、MD5加密

    -- =============================================
    -- Description:  实现MD5加密算法,返回对字符串的加密结果串
    -- =============================================
    CREATE FUNCTION MD5
    (
        -- 源字符串
        @src nvarchar(4000),
        -- 加密类型(16/32)
        @type int = 32
    )
    RETURNS varchar(255)
    WITH EXECUTE AS CALLER
    AS
    BEGIN
        -- 存放md5加密串(ox)
        DECLARE @smd5 nvarchar(4000)
        -- 加密字符串此处用MD5加密,还有一种是SHA1加密
        SELECT @smd5 = sys.fn_VarBinToHexStr(hashbytes('MD5', @src));
        IF @type=16
            SELECT @smd5 = SUBSTRING(@smd5,11,16)   --16位
        ELSE
            SELECT @smd5 = SUBSTRING(@smd5,3,32)    --32位
        -- 返回加密串
        RETURN @smd5
    
    END

    4、随机一个区间中的数字

    /*
    Desc:随机一个区间数字
    Email:gametheworld@126.com
    Author:叶康
    UpdateDate:2015-12-07 10:31:02.993
    QQ:865252662
    select getdate()
    */
    CREATE VIEW ViewRand as SELECT re=rand()
    create function Get_RandNum( @SNum int, @ENum int) 
        returns decimal(38,0) 
    as 
        begin 
            declare @r decimal(38,0) 
            select @r=cast(re*(@ENum-@SNum)+@SNum as decimal(38,0)) FROM ViewRand; 
            return(@r) 
        end 
    go 

    5、随机一个区间时间

      例如随一个一个时间 2015-12-01 至 2015-12-10日的时间,且:小时随机:范围在9点 至22点间

    SELECT DBO.Get_RandTime('2015-12-01','2015-12-10',9,22)

    /*
    Desc:随机时间
    Email:gametheworld@126.com
    Author:叶康
    UpdateDate:2015-12-10 13:34:06.160
    QQ:865252662
    select getdate()
    */
    ALTER function [dbo].[Get_RandTime]( 
        @Sdt datetime
        ,@Edt datetime
        ,@SRH INT=0        --小时区间起始
        ,@ERH INT=24    --小时区间结束
        ) 
        returns datetime 
    as 
        begin 
            declare @dt datetime
            DECLARE @Hour INT        --小时
            DECLARE @Minutes INT    --分钟
            DECLARE @Second INT        --
            DECLARE @MS INT            --毫秒
            
            SELECT @Hour=DBO.Get_RandNum(@SRH,@ERH);
            SELECT @Minutes=DBO.Get_RandNum(0,59);
            SELECT @Second=DBO.Get_RandNum(0,59);
            SELECT @MS=DBO.Get_RandNum(0,1000);
            
            DECLARE @TempTime nvarchar(50);
            set @TempTime=convert(char(10),@Edt,120)+' '+Convert(nvarchar(20),@Hour)+':'+Convert(nvarchar(20),@Minutes)+':'+Convert(nvarchar(20),@Second)+'.'+Convert(nvarchar(20),@MS);
            
            select @dt=dateadd(dd,datediff(dd,@Edt,convert(char(10),@Sdt,120))*re,Convert(datetime,@TempTime)) FROM ViewRand;
            return(@dt) 
        end 

    6、以关键字分割成表

    ALTER FUNCTION [dbo].[SplitToTable]
     (
         @SplitString nvarchar(max),
         @Separator nvarchar(10)=' '
     )
     RETURNS @SplitStringsTable TABLE
     (
     [id] int identity(1,1),
     [value] nvarchar(max)
     )
     AS
     BEGIN
         DECLARE @CurrentIndex int;
         DECLARE @NextIndex int;
         DECLARE @ReturnText nvarchar(max);
         SELECT @CurrentIndex=1;
         WHILE(@CurrentIndex<=len(@SplitString))
             BEGIN
                 SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
                 IF(@NextIndex=0 OR @NextIndex IS NULL)
                     SELECT @NextIndex=len(@SplitString)+1;
                     SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                     IF(LEN(@ReturnText)>0)
                     BEGIN
                        INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
                     END
                     SELECT @CurrentIndex=@NextIndex+1;
                 END
         RETURN;
     END

    7、随机手机号(数量在大的情况不容乐观,我随机了10w个用了两个小时,可以优化,别干坏事

      用法 exec yekang_water_RandomNumber 8,100000

    /*
    Desc:随机手机号
    Email:gametheworld@126.com
    Author:叶康
    UpdateDate:2015-12-01 16:13:25.530
    QQ:865252662
    select getdate()
    */
    ALTER PROCEDURE yekang_water_RandomNumber
        @Len INT = 1, --随机数位数 
        @Rows INT = 1 --随机个数 
    AS 
        BEGIN 
        DECLARE @PT AS TABLE(id int,item VARCHAR(MAX));
        DECLARE @TS NVARCHAR(500);
        DECLARE @RUNB INT;
        
        --移动号段
        SET @TS='134,135,136,137,138,139,147,150,151,152,157,158,159,178,182,183,184,187,188,';
        --联通号段
        SET @TS=@TS+'130,131,132,155,156,185,186,145,176,';
        --电信号段
        SET @TS=@TS+'133,153,177,180,181,189';
        
        INSERT INTO @PT(id,item)
        select ROW_NUMBER()over(order by item desc) as id,* from dbo.SplitStringToTable(@TS,',');
        ----------------------随机位数
            --DECLARE @T AS TABLE([Random Number] VARCHAR(MAX)) 
            DECLARE @L INT = 1, @R INT = 1 
            WHILE @R <= @Rows 
                BEGIN 
                    DECLARE @RN varchar(MAX) = '' 
                    WHILE @L <= @Len --随机产生每个随数的位数 
                        BEGIN 
                            SET @RN = @RN + CHAR(ROUND(RAND() * 9 + 48,0)) 
                            SET @L = @L + 1 
                        END 
                    select @RUNB=ROUND(RAND()*34,0);
                    DECLARE @item nvarchar(5)
                    --------前缀-----------
                    select @item=item from @PT where id=@RUNB;
                    -------------------
                    set @RN=@item+@RN;
                    --如果产生相同的随机数,将不会存储 
                    IF NOT EXISTS(SELECT Tel FROM a_water_Tels WHERE Tel = @RN) 
                        BEGIN 
                            INSERT INTO a_water_Tels(Tel)VALUES(@RN)
                            --INSERT INTO @T SELECT @RN --INSERT INTO @T ([Random Number])VALUES (@RN) 
                            SET @R = @R + 1 --记录总共产生了几笔随机数 
                            SET @L = 1 -- 每产生完一个随机数之后,将随机数的位数初始化为1 
                    END 
        END 
    END 

    8、

  • 相关阅读:
    (二)《机器学习》(周志华)第4章 决策树 笔记 理论及实现——“西瓜树”——CART决策树
    (一)《机器学习》(周志华)第4章 决策树 笔记 理论及实现——“西瓜树”
    python学习笔记——递归算法
    Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
    MySQL安装总是失败,提示缺少Visual Studio 2013 Redistributable
    Python爬虫简单实现之Q乐园图片下载
    Python爬虫之简单的图片获取
    Springboot启动,URL正确,但是报404
    Linux常用命令
    MYSQL常用的配置参数优化
  • 原文地址:https://www.cnblogs.com/nimeide/p/5036803.html
Copyright © 2011-2022 走看看