SQL学习


  1. 几个操作时间的函数

    1. --datapart 获取时间中的年月日时分秒等部分
    2. select DATEPART(year,current_timestamp);
    3. select DATEPART(DAY,current_timestamp);
    4. select DATEPART(MONTH,current_timestamp);
    5.  
    6. --dateadd 在相应时间上加上年月日时分秒等
    7. select CURRENT_TIMESTAMP,DATEADD(DAY,10,CURRENT_TIMESTAMP);
    8. select DATEADD(month,11,'2001-2-28 12:00:00') as 上帝时刻;
    9.  
    10. --datediff 获取两时间段的差值并换算为时分秒年月日等
    11. select DATEDIFF(month,'2014-8-3','2015-9-10');
    12.  
    13. --转换函数 转换类型
    14. --cast convert
    15.  
    16. select ''+456;
    17. select ''+cast(456 as varchar);
    18. select ''+CONVERT(varchar,456);
    19.  
    20. --convert时间类型转换 后面的数字即不同地区的时间表示方式
    21. select CURRENT_TIMESTAMP,
    22. CONVERT(VARCHAR,CURRENT_TIMESTAMP,111);--中国时间表示
    23.  
    24. select CURRENT_TIMESTAMP,
    25. CONVERT(VARCHAR,CURRENT_TIMESTAMP,110);--美国时间表示

  2. 简单练习
    1. --练习题
    2. use TextDB
    3. create table TB_CallRecord
    4. (
    5. Id int not null identity(1,1),
    6. CallNumber nvarchar(50),
    7. TelNum varchar(50),
    8. StartDateTime datetime null,
    9. EndDateTime datetime null
    10. )
    11. --主键约束
    12. alter table TB_CallRecord
    13. add constraint PK_CallRecord primary key (Id);
    14. --检查约束
    15. alter table TB_CallRecord
    16. add constraint CK_CallRecords check(CallNumber like '[0-9][0-9][0-9]')
    17.  
    18. alter table TB_CallRecord
    19. add constraint CK_CallRecords_EndDateTime check(EndDateTime > StartDateTime)
    20.  
    21. --默认约束
    22. alter table TB_CallRecord
    23. add constraint DF_CallRecords default(getdate()) for EndDateTime
    24.  
    25. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DAF00A4CB80 AS DateTime), CAST(0x00009DAF00A62E94 AS DateTime));
    26. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB000D63BC0 AS DateTime), CAST(0x00009DB000D68DC8 AS DateTime));
    27. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB000E85C60 AS DateTime), CAST(0x00009DB000E92F50 AS DateTime));
    28. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB2015BB7A0 AS DateTime), CAST(0x00009DB2015C4DA0 AS DateTime));
    29. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DA4014C9C70 AS DateTime), CAST(0x00009DA4014E0308 AS DateTime));
    30. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB400DAA0C0 AS DateTime), CAST(0x00009DB400DD5FE0 AS DateTime));
    31. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB200B9AB40 AS DateTime), CAST(0x00009DB200B9FC1C AS DateTime));
    32. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009DB8014042B8 AS DateTime), CAST(0x00009DB80141804C AS DateTime));
    33. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));
    34. INSERT TB_CallRecord ([CallNumber], [TelNum], [StartDateTime], [EndDateTime]) VALUES ('', '', CAST(0x00009D9A00FB9898 AS DateTime), CAST(0x00009D9A00FE6118 AS DateTime));
    35.  
    36. --查看全表
    37. select * from TB_CallRecord;
    38.  
    39. --输出通话时间最长的五条记录
    40. select top 5 *,DATEDIFF(SECOND,StartDateTime,EndDateTime) as 通话时长 from TB_CallRecord order by DATEDIFF(SECOND,StartDateTime,EndDateTime) DESC;
    41.  
    42. --输出所有数据中拨打长途号码(对方号码以0开头)的总时长。likesum
    43. SELECT SUM(DATEDIFF(SECOND,StartDateTime,EndDateTime)) from TB_CallRecord WHERE TelNum like '0%';
    44.  
    45. --输出通话总时长最多的前三个呼叫员的编号。
    46. select top 3 Id,DATEDIFF(SECOND,StartDateTime,EndDateTime) as 通话时长 from TB_CallRecord order by DATEDIFF(SECOND,StartDateTime,EndDateTime) DESC;
    47.  
    48. --输出本月拨打电话次数最多的前三个呼叫员的编号.group by,count(*)
    49. select top 3 CallNumber,Id,StartDateTime From TB_CallRecord where DATEPART(MONTH,StartDateTime) = 7 order by CallNumber DESC;
    50.  
    51. --表序列化row_number()over(order by 字段) 就是将不连续的表依据某一列值排序
    52. select ROW_NUMBER()over(order by Id) as 序列化 ,*from TB_CallRecord;

  3. 事务
    1. --事务:SQL中每一条语句都是一个事务,任何错误都会导致整个事务失败
        --语法:
      /*
        begin transaction
         代码
      end
      */
    2. begin transaction
    3. declare @myError int;
    4. update TextDB..TB_CallRecord set CallNumber = 0127897789 where CallNumber = '';
    5. set @myError = (select @@ERROR);
    6. update TextDB..TB_CallRecord set CallNumber = '' where Id = 10;
    7. set @myError += (select @@ERROR);
    8. if(@myError!=0)
    9. begin
    10. rollback transaction --回滚当前的操作
    11. end
    12. else
    13. begin
    14. commit transaction --执行当前的操作
    15. end
    16. --事务的特征:如果一个事务满足原子性,持久性,隔离性,一致性,那么这个操作则称为事务。
    17.  
    18. --begin transaction
    19.  
    20. select *from TextDB..TB_CallRecord;

  4. 存储过程
    1. --存储过程
    2. --语法:
    3. /*
    4. create proc[edure] 存储过程名字
    5. 参数 as 类型 [默认值|out]
    6. as
    7. begin
    8. 代码
    9. end
    10. */
    11. --例如:
    12. go
    13. create proc usp_text
    14. as
    15. begin
    16. begin transaction
    17. declare @myError int;
    18. update TextDB..TB_CallRecord set CallNumber = '' where CallNumber = '';
    19. set @myError = (select @@ERROR);
    20. update TextDB..TB_CallRecord set CallNumber = '' where Id = 10;
    21. set @myError += (select @@ERROR);
    22. if(@myError!=0)
    23. begin
    24. rollback transaction
    25. end
    26. else
    27. begin
    28. commit transaction
    29. end
    30.  
    31. end
    32. --执行存储过程
    33. exec usp_text;
    34.  
    35. select * from TextDB..TB_CallRecord;
    36.  
    37. --带参数的存储过程
    38. go
    39. create proc usp_text2
    40. @oldnum as nvarchar(50)
    41. ,@newnum as nvarchar(50)
    42. as
    43. begin
    44. update TextDB..TB_CallRecord set CallNumber = @newnum where CallNumber = @oldnum;
    45. end
    46.  
    47. --调用带参数的存储过程
    48. exec usp_text2 '','';
    49. select * from TextDB..TB_CallRecord
    50.  
    51. --带参数和返回值的存储过程
    52. go
    53. create proc usp_text3
    54. @oldnum as nvarchar(50)
    55. ,@newnum as nvarchar(50)
    56. ,@isSuccess int output --使用output将函数内参数抛出给外部
    57. as
    58. begin
    59. declare @myError int
    60. update TextDB..TB_CallRecord set CallNumber = @newnum where CallNumber = @oldnum;
    61. set @myError = (select @@ERROR);
    62. if(@myError=0)
    63. begin
    64. commit
    65. set @isSuccess = 1
    66. end
    67. else
    68. begin
    69. rollback
    70. set @isSuccess = 0;
    71. end
    72. end
    73.  
    74. --调用带参数和返回值的存储过
    75. declare @result int
    76. exec usp_text3 '','',@result output;
    77. select @result;
    78.  
    79. --使用try catch
    80. go
    81. create proc usp_text4
    82. @oldnum as nvarchar(50)
    83. ,@newnum as nvarchar(50)
    84. ,@IsSucess int output
    85. as
    86. begin
    87. begin transaction
    88. update TextDB..TB_CallRecord
    89. set CallNumber = @newnum
    90. where CallNumber = @oldnum
    91. begin try
    92. commit
    93. set @IsSucess = 1;
    94. end try
    95. begin catch
    96. rollback
    97. set @IsSucess = 0;
    98. end catch
    99. end
    100.  
    101. --调用带有trycatch的存储过程
    102. declare @result int
    103. exec usp_text4 '','',@result output;
    104. select @result;

  5. 触发器
    1. --触发器
    2. --语法
    3. /*
    4. create trigger tr_类型触发器名字 on 表名
    5. 触发类型:after|instea of
    6. 操作类型:inser|delete|update
    7. as
    8. begin
    9. 代码
    10. end
    11. */
    12.  
    13. --案例
    14. --插入数据的同时获得自动增长的Id
    15. select * from TextDB..TB_USER;
    16.  
    17. insert INTO TextDB..TB_USER (userID,[password],code,lastTime)
    18. OUTPUT inserted.userID
    19. VALUES ('aaa','DDD','','2007-03-12');
    20.  
    21. -----------
    22. go
    23. create trigger tr_delete_不会删除的表 on TextDB..TB_USER
    24. after
    25. delete
    26. as
    27. insert into TextDB..TB_USER(userID,[password],code,lastTime)
    28. select userID,[password],code,lastTime from deleted;
    29. go
    30.  
    31. select * from TextDB..TB_USER;
    32. delete TB_USER
    33. select SUSER_NAME();

    学习于蒋坤老师视频教程

SQL学习(时间,存储过程,触发器)的更多相关文章

  1. sql学习笔记--存储过程

    存储过程(stored procedure)有时也称sproc,它是真正的脚本,更准确地说,它是批处理(batch),但都不是很确切,它存储与数据库而不是单独的文件中. 存储过程中有输入参数,输出参数 ...

  2. PL/SQL学习笔记之触发器

    一:触发器响应的事件 数据库操作(DML)语句(DELETE,INSERT,UPDATE) 数据库定义(DDL)语句(CREATE,ALTER或DROP) 数据库操作(SERVERERROR,登录,注 ...

  3. 1.8(SQL学习笔记)触发器

    一.触发器简介 当需要某些操作在某些语句执行之前或之后执行就需要使用触发器. 例如每次插入数据时进行数据校对,每次删除数据后将删除内容备份到新表. 这些操作我们希望它(某些语句)在满足某些条件时自动执 ...

  4. SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  5. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  6. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  7. Sql Server 查看存储过程最后修改时间

    Sql Server 查看存储过程最后修改时间 select * from sys.procedures order by modify_date desc

  8. 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器

    @ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...

  9. MySQL笔记---视图,存储过程, 触发器的使用入门

    大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只 ...

随机推荐

  1. 【转】NHIBERNATE的各种保存方式的区别 (SAVE,PERSIST,UPDATE,SAVEORUPDTE,MERGE,FLUSH,LOCK)

    前言 今天学学习NH这个框架,在新增对象的时候,看见大神用了persist而没有用Save,心中比较疑惑,查阅资料的时候,发现这篇写的非常不错,转载供大家参考. hibernate的保存hiberna ...

  2. ARM linux电源管理——Cortex A系列CPU(32位)睡眠和唤醒的底层汇编实现

    ARM linux电源管理——Cortex A系列CPU(32位)睡眠和唤醒的底层汇编实现 承接 http://www.wowotech.net/pm_subsystem/suspend_and_re ...

  3. iOS 获取蜂窝网络信号强度 包含iPhoneX XS XR XSMASX (最新)

    1.虽然各种直接获取信号强度的api都被封杀了.但是还有一个另类的黑魔法可以获取到.那就是遍历UIStatusBar了 网络上有的文章写的会崩溃 比如: - (int)getSignalStrengt ...

  4. C++分享笔记:扑克牌的洗牌发牌游戏设计

    笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. ...

  5. stl学习之namespace

    一.为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C++ ...

  6. [异常笔记] zookeeper集群启动异常: Cannot open channel to 2 at election address ……

    - ::, [myid:] - WARN [WorkerSender[myid=]:QuorumCnxManager@] - Cannot open channel to at election ad ...

  7. ACM 2000~2002

    ACM  2000  输入三个字符后,按各个字符的ASCⅡ码从小打到的顺序输出这三个字符. import java.util.Scanner; public class Lengxc {public ...

  8. 启动pip时,< Fatal error in launcher: Unable to create process using '"' >问题的原因及解决方法

    根本原因 要启动的pip程序,中指定的python程序路径不对 实例分析 我的window电脑上同时安装了python2.7和python3.6,他们的安装路径如下图: 注意图python2.7中红线 ...

  9. 使用什么进行app开发

    HTML5+plus, Hbuilder HTML5+plus介绍 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的 ...

  10. 【转载】jquery实现勾选复选框触发事件给input赋值+回显复选框

    引用:https://blog.csdn.net/rui276933335/article/details/45717461 JSP: <td class="as1"> ...