工作记录(一):mysql和sqlServer区别

1.工作中要求将原本mysql的数据库变成sqlServer,整理一些mysql和sqlServer的区别

ifnull --> isnull
now-->GETDATE
DATE_FORMAT( createdDate, '%H:%i' ) -->CONVERT(CHAR(5), createdDate, 108) 
DATE_FORMAT( createdDate, '%Y-%m-%d' ) -- >CONVERT(CHAR(10), createdDate, 23) 
DATE_FORMAT(auditTime,'%Y-%m-%d %H:%i:%s') --> CONVERT(CHAR(20),auditTime,120)
date_sub(now(), interval 30 MINUTE) -->DATEADD(day,-2,GETDATE())
date_add(now(), interval 30 MINUTE) -->DATEADD(day,2,GETDATE())

select .... limit 1  =>  select   top 1.....

 

2.初次接触存储过程sqlserver,记录一些

ALTER PROCEDURE [dbo].[Stat_JudgeDataCompress] @StartTime DATETIME ,    --开始时间
    @EndTime DATETIME ,      --结束时间
    @DataType VARCHAR(10) ,   --数据类型(售票、退票)
    @StatisticType VARCHAR(10) --统计类型(按售票时间、按游玩日期)
AS
    BEGIN       
        ------------------------------------如果查询时间为当前时间,则不压缩数据-----------------------------------------
        IF DATEDIFF(DAY, @StartTime, GETDATE()) <= 0
            BEGIN
                RETURN;
            END;
        ------------------------如果查询结束日期为当前时间,则压缩结束时间至前一天的23:59:59------------------------------
        IF DATEDIFF(DAY, @EndTime, GETDATE()) = 0
            BEGIN
                SET @EndTime = CONVERT(VARCHAR(10), DATEADD(DAY, -1, @EndTime), 120)
                    + ' 23:59:59';
            END;  

		-------------------如果开始结束时间同一天,并且不是00:00:00-23:59:59,则不压缩数据------------------------------
        DECLARE @DayCount INT; 
        SELECT  @DayCount = DATEDIFF(DAY, @StartTime, @EndTime);
        IF @DayCount = 0
            AND ( CONVERT(VARCHAR(8), @StartTime, 8) <> '00:00:00'
                  OR CONVERT(VARCHAR(8), @EndTime, 8) <> '23:59:59'
                )
            BEGIN
                RETURN;
            END;
		-------------------如果开始结束时间间隔一天,并且不是00:00:00-23:59:59,则不压缩数据----------------------------
        IF @DayCount = 1
            AND CONVERT(VARCHAR(8), @StartTime, 8) <> '00:00:00'
            AND CONVERT(VARCHAR(8), @EndTime, 8) <> '23:59:59'
            BEGIN
                RETURN;
            END;
        ------------------------------------创建临时表------------------------------------------------------------------
      
        IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#SaleInfo')
                            AND type = 'U' )
            DROP TABLE #SaleInfo;	   
        CREATE TABLE #SaleInfo
            (
              Sale_Date DATETIME ,
              Ticket_ID BIGINT ,
              PaymentType_ID BIGINT ,
              Sale_TicketCount INT ,
              Sale_PersonCount INT ,
              Sale_TotalMoney DECIMAL ,
              Sale_TicketSum DECIMAL
            )
            
        IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#ReturnInfo')
                            AND type = 'U' )
            DROP TABLE #ReturnInfo;  
        CREATE TABLE #ReturnInfo
            (
              Cancel_Date DATETIME ,
              Ticket_ID BIGINT ,
              PaymentType_ID BIGINT ,
              Cancel_TicketCount INT ,
              Cancel_PersonCount INT ,
              Cancel_TotalMoney DECIMAL ,
              Cancel_TicketSum DECIMAL
            )   
             
        IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#SaleCacheInfo')
                            AND type = 'U' )
            DROP TABLE #SaleCacheInfo;
        CREATE TABLE #SaleCacheInfo
            (
              Sale_Date DATETIME ,
              Ticket_ID BIGINT ,
              PaymentType_ID BIGINT ,
              Sale_TicketCount INT ,
              Sale_PersonCount INT ,
              Sale_TotalMoney DECIMAL ,
              Sale_TicketSum DECIMAL
            )
            
        IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#ReturnCacheInfo')
                            AND type = 'U' )
            DROP TABLE #ReturnCacheInfo;
        CREATE TABLE #ReturnCacheInfo
            (
              Cancel_Date DATETIME ,
              Ticket_ID BIGINT ,
              PaymentType_ID BIGINT ,
              Cancel_TicketCount INT ,
              Cancel_PersonCount INT ,
              Cancel_TotalMoney DECIMAL ,
              Cancel_TicketSum DECIMAL
            )    
            
        IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#Stat_CompressDate')
                            AND type = 'U' )
            DROP TABLE #Stat_CompressDate;	
        CREATE TABLE #Stat_CompressDate
            (
              OperateDate DATE ,
              DataType VARCHAR(10) ,
              StatisticType VARCHAR(19)
            );	

        -------------------------如果查询开始时间不是完整的一天,则压缩开始时间为后一天的00:00:00------------------------
        IF CONVERT(VARCHAR(8), @StartTime, 8) <> '00:00:00'
            BEGIN
                SET @StartTime = CONVERT(VARCHAR(10), DATEADD(DAY, 1,
                                                              @StartTime), 120)
                    + ' 00:00:00';
            END;

        ------------------------如果查询结束日期为不是完整的一天,则压缩结束时间为前一天的23:59:59--------------
        IF CONVERT(VARCHAR(8), @EndTime, 8) <> '23:59:59'
            BEGIN
                SET @EndTime = CONVERT(VARCHAR(10), DATEADD(DAY, -1, @EndTime), 120)
                    + ' 23:59:59';
            END;

        ---------------------------------------------比较售票数据---------------------------------------------------
        IF @DataType = 'Sale'
            BEGIN
                IF @StatisticType = 'SaleDate'
                    BEGIN
          --------------------------------------原始数据和压缩表数据存入临时表-----------------------------------------
                        INSERT  INTO #SaleInfo
                                SELECT  CONVERT(VARCHAR(10), Sale_Date, 120) AS Sale_Date ,
                                        Ticket_ID ,
                                        PaymentType_ID ,
                                        ISNULL(SUM(Sale_TicketCount), 0) AS Sale_TicketCount ,
                                        ISNULL(SUM(Sale_PersonCount), 0) AS Sale_PersonCount ,
                                        ISNULL(SUM(Sale_TotalMoney), 0) AS Sale_TotalMoney ,
                                        ISNULL(SUM(Sale_TicketSum), 0) AS Sale_TicketSum
                                FROM    dbo.V_StatisticsSaleInfo_All
                                WHERE   Sale_Date >= @StartTime
                                        AND Sale_Date <= @EndTime
                                GROUP BY CONVERT(VARCHAR(10), Sale_Date, 120) ,
                                        Ticket_ID ,
                                        PaymentType_ID

                        INSERT  INTO #SaleCacheInfo
                                SELECT  Sale_Date ,
                                        Ticket_ID ,
                                        PaymentType_ID ,
                                        ISNULL(SUM(Sale_TicketCount), 0) AS Sale_TicketCount ,
                                        ISNULL(SUM(Sale_PersonCount), 0) AS Sale_PersonCount ,
                                        ISNULL(SUM(Sale_TotalMoney), 0) AS Sale_TotalMoney ,
                                        ISNULL(SUM(Sale_TicketSum), 0) AS Sale_TicketSum
                                FROM    dbo.Stat_Sale_Cache_T
                                WHERE   Sale_Date >= CONVERT(VARCHAR(10), @StartTime, 120)
                                        AND Sale_Date <= CONVERT(VARCHAR(10), @EndTime, 120)
                                GROUP BY Sale_Date ,
                                        Ticket_ID ,
                                        PaymentType_ID

         ------------------------------------------将有差异的数据存入临时表-------------------------------------
                        INSERT  INTO #Stat_CompressDate
                                ( OperateDate ,
                                  DataType ,
                                  StatisticType
                                )
                                SELECT  t1.Sale_Date AS OperateDate ,
                                        'Sale' AS DataType ,
                                        'SaleDate' AS StatisticType
                                FROM    #SaleInfo t1
                                        LEFT JOIN #SaleCacheInfo t2 ON t1.Sale_Date = t2.Sale_Date
                                                              AND t1.Ticket_ID = t2.Ticket_ID
                                                              AND t1.PaymentType_ID = t2.PaymentType_ID
                                WHERE   ( t1.Sale_TicketCount <> t2.Sale_TicketCount
                                          OR t1.Sale_PersonCount <> t2.Sale_PersonCount
                                          OR t1.Sale_TotalMoney <> t2.Sale_TotalMoney
                                          OR t1.Sale_TicketSum <> t2.Sale_TicketSum
                                        )
                                        OR t2.Sale_Date IS NULL;

                    END;
                ELSE
                    IF @StatisticType = 'PlayDate'
                        BEGIN 
                            INSERT  INTO #SaleInfo
                                    SELECT  CONVERT(VARCHAR(10), Play_Date, 120) AS Sale_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID ,
                                            ISNULL(SUM(Sale_TicketCount), 0) AS Sale_TicketCount ,
                                            ISNULL(SUM(Sale_PersonCount), 0) AS Sale_PersonCount ,
                                            ISNULL(SUM(Sale_TotalMoney), 0) AS Sale_TotalMoney ,
                                            ISNULL(SUM(Sale_TicketSum), 0) AS Sale_TicketSum
                                    FROM    dbo.V_StatisticsSaleInfo_All
                                    WHERE   Play_Date >= @StartTime
                                            AND Play_Date <= @EndTime
                                    GROUP BY CONVERT(VARCHAR(10), Play_Date, 120) ,
                                            Ticket_ID ,
                                            PaymentType_ID 
                            INSERT  INTO #SaleCacheInfo
                                    SELECT  Play_Date AS Sale_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID ,
                                            ISNULL(SUM(Sale_TicketCount), 0) AS Sale_TicketCount ,
                                            ISNULL(SUM(Sale_PersonCount), 0) AS Sale_PersonCount ,
                                            ISNULL(SUM(Sale_TotalMoney), 0) AS Sale_TotalMoney ,
                                            ISNULL(SUM(Sale_TicketSum), 0) AS Sale_TicketSum
                                    FROM    dbo.Stat_Sale_Cache_T
                                    WHERE   Play_Date >= CONVERT(VARCHAR(10), @StartTime, 120)
                                            AND Play_Date <= CONVERT(VARCHAR(10), @EndTime, 120)
                                    GROUP BY Play_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID 

                            INSERT  INTO #Stat_CompressDate
                                    ( OperateDate ,
                                      DataType ,
                                      StatisticType
                                    )
                                    SELECT  t1.Sale_Date AS OperateDate ,
                                            'Sale' AS DataType ,
                                            'PlayDate' AS StatisticType
                                    FROM    #SaleInfo t1
                                            LEFT JOIN #SaleCacheInfo t2 ON t1.Sale_Date = t2.Sale_Date
                                                              AND t1.Ticket_ID = t2.Ticket_ID
                                                              AND t1.PaymentType_ID = t2.PaymentType_ID
                                    WHERE   ( t1.Sale_TicketCount <> t2.Sale_TicketCount
                                              OR t1.Sale_PersonCount <> t2.Sale_PersonCount
                                              OR t1.Sale_TotalMoney <> t2.Sale_TotalMoney
                                              OR t1.Sale_TicketSum <> t2.Sale_TicketSum
                                            )
                                            OR t2.Sale_Date IS NULL;
                        END
            END

        -------------------------------------------比较退票数据--------------------------------------------
        ELSE
            IF @DataType = 'Return'
                BEGIN
                    IF @StatisticType = 'SaleDate'
                        BEGIN
        ----------------------------原始数据和压缩表数据存入临时表------------------------------------------
                            INSERT  INTO #ReturnInfo
                                    SELECT  CONVERT(VARCHAR(10), Cancel_Date, 120) AS Cancel_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID ,
                                            ISNULL(SUM(Cancel_TicketCount), 0) AS Cancel_TicketCount ,
                                            ISNULL(SUM(Cancel_PersonCount), 0) AS Cancel_PersonCount ,
                                            ISNULL(SUM(Cancel_TotalMoney), 0) AS Cancel_TotalMoney ,
                                            ISNULL(SUM(Cancel_TicketSum), 0) AS Cancel_TicketSum
                                    FROM    dbo.V_StatisticsReturnInfo_All
                                    WHERE   Cancel_Date >= @StartTime
                                            AND Cancel_Date <= @EndTime
                                    GROUP BY CONVERT(VARCHAR(10), Cancel_Date, 120) ,
                                            Ticket_ID ,
                                            PaymentType_ID 

                            INSERT  INTO #ReturnCacheInfo
                                    SELECT  Cancel_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID ,
                                            ISNULL(SUM(Cancel_TicketCount), 0) AS Cancel_TicketCount ,
                                            ISNULL(SUM(Cancel_PersonCount), 0) AS Cancel_PersonCount ,
                                            ISNULL(SUM(Cancel_TotalMoney), 0) AS Cancel_TotalMoney ,
                                            ISNULL(SUM(Cancel_TicketSum), 0) AS Cancel_TicketSum
                                    FROM    dbo.Stat_Cancel_Cache_T
                                    WHERE   Cancel_Date >= CONVERT(VARCHAR(10), @StartTime, 120)
                                            AND Cancel_Date <= CONVERT(VARCHAR(10), @EndTime, 120)
                                    GROUP BY Cancel_Date ,
                                            Ticket_ID ,
                                            PaymentType_ID 

           ------------------------将有差异的数据存入临时表---------------------------------------------------
                            INSERT  INTO #Stat_CompressDate
                                    ( OperateDate ,
                                      DataType ,
                                      StatisticType
                                    )
                                    SELECT  t1.Cancel_Date AS OperateDate ,
                                            'Return' AS DataType ,
                                            'SaleDate' AS StatisticType
                                    FROM    #ReturnInfo t1
                                            LEFT JOIN #ReturnCacheInfo t2 ON t1.Cancel_Date = t2.Cancel_Date
                                                              AND t1.Ticket_ID = t2.Ticket_ID
                                                              AND t1.PaymentType_ID = t2.PaymentType_ID
                                    WHERE   ( t1.Cancel_TotalMoney <> t2.Cancel_TotalMoney
                                              OR t1.Cancel_PersonCount <> t2.Cancel_PersonCount
                                              OR t2.Cancel_TicketCount <> t1.Cancel_TicketCount
                                              OR t1.Cancel_TicketSum <> t2.Cancel_TicketSum
                                            )
                                            OR t2.Cancel_Date IS NULL;
                        END
                    ELSE
                        IF @StatisticType = 'PlayDate'
                            BEGIN
                                INSERT  INTO #ReturnInfo
                                        SELECT  CONVERT(VARCHAR(10), Play_Date, 120) AS Cancel_Date ,
                                                Ticket_ID ,
                                                PaymentType_ID ,
                                                ISNULL(SUM(Cancel_TicketCount), 0) AS Cancel_TicketCount ,
                                                ISNULL(SUM(Cancel_PersonCount), 0) AS Cancel_PersonCount ,
                                                ISNULL(SUM(Cancel_TotalMoney), 0) AS Cancel_TotalMoney ,
                                                ISNULL(SUM(Cancel_TicketSum), 0) AS Cancel_TicketSum
                                        FROM    dbo.V_StatisticsReturnInfo_All
                                        WHERE   Play_Date >= @StartTime
                                                AND Play_Date <= @EndTime
                                        GROUP BY CONVERT(VARCHAR(10), Play_Date, 120) ,
                                                Ticket_ID ,
                                                PaymentType_ID 

                                INSERT  INTO #ReturnCacheInfo
                                        SELECT  Play_Date AS Cancel_Date ,
                                                Ticket_ID ,
                                                PaymentType_ID ,
                                                ISNULL(SUM(Cancel_TicketCount),
                                                       0) AS Cancel_TicketCount ,
                                                ISNULL(SUM(Cancel_PersonCount),
                                                       0) AS Cancel_PersonCount ,
                                                ISNULL(SUM(Cancel_TotalMoney),
                                                       0) AS Cancel_TotalMoney ,
                                                ISNULL(SUM(Cancel_TicketSum),
                                                       0) AS Cancel_TicketSum
                                        FROM    dbo.Stat_Cancel_Cache_T
                                        WHERE   Play_Date >= CONVERT(VARCHAR(10), @StartTime, 120)
                                                AND Play_Date <= CONVERT(VARCHAR(10), @EndTime, 120)
                                        GROUP BY Play_Date ,
                                                Ticket_ID ,
                                                PaymentType_ID 

                                INSERT  INTO #Stat_CompressDate
                                        ( OperateDate ,
                                          DataType ,
                                          StatisticType
                                        )
                                        SELECT  t1.Cancel_Date AS OperateDate ,
                                                'Return' AS DataType ,
                                                'SaleDate' AS StatisticType
                                        FROM    #ReturnInfo t1
                                                LEFT JOIN #ReturnCacheInfo t2 ON t1.Cancel_Date = t2.Cancel_Date
                                                              AND t1.Ticket_ID = t2.Ticket_ID
                                                              AND t1.PaymentType_ID = t2.PaymentType_ID
                                        WHERE   ( t1.Cancel_TotalMoney <> t2.Cancel_TotalMoney
                                                  OR t1.Cancel_PersonCount <> t2.Cancel_PersonCount
                                                  OR t2.Cancel_TicketCount <> t1.Cancel_TicketCount
                                                  OR t1.Cancel_TicketSum <> t2.Cancel_TicketSum
                                                )
                                                OR t2.Cancel_Date IS NULL;
                            END 
                END

        DECLARE @Stat_CompressDate AS Stat_CompressDate;
        INSERT  INTO @Stat_CompressDate
                SELECT  *
                FROM    #Stat_CompressDate;
        EXEC dbo.Stat_CreateStatisticsData @Stat_CompressDate;
        DROP TABLE #Stat_CompressDate;
    END;

(1)对于需要传入的参数,定义在开头@StartTime DATETIME

(2)sqlserver比较日期:DATEDIFF(DAY, @StartTime, GETDATE())

(3)条件判断不符合,退出该存储过程

 BEGIN      RETURN;          END;

(4)日期设为前一天

SET @EndTime = CONVERT(VARCHAR(10), DATEADD(DAY, -1, @EndTime), 120)+ ' 23:59:59';

(5)定义一个存储过程内需要用到的变量,并给变量赋值

DECLARE @DayCount INT; 

 SELECT  @DayCount = DATEDIFF(DAY, @StartTime, @EndTime);

(6)判断日期的时分秒

 CONVERT(VARCHAR(8), @StartTime, 8) <> '00:00:00'

(7)创建临时表

 IF EXISTS ( SELECT  *
                    FROM    tempdb.dbo.sysobjects
                    WHERE   id = OBJECT_ID(N'tempdb..#SaleInfo')
                            AND type = 'U' )
            DROP TABLE #SaleInfo;       
        CREATE TABLE #SaleInfo
            (
              Sale_Date DATETIME ,
              Ticket_ID BIGINT ,
              PaymentType_ID BIGINT ,
              Sale_TicketCount INT ,
              Sale_PersonCount INT ,
              Sale_TotalMoney DECIMAL ,
              Sale_TicketSum DECIMAL
            )

(8)向临时表插入数据

INSERT  INTO #SaleInfo + 查询语句

(9)表和视图的区别:表是实际存在的,视图是抽象的

(10)调用别的存储过程

 EXEC dbo.Stat_CreateStatisticsData @Stat_CompressDate;
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值