关于sql的一些学习心得

时间:2021-04-27 16:26:18

因为最近的项目的存储过程都是由我做的,关于一些sql的语法以及心得记录一下:

  1.首先是cast:

            

      CAST是将一种数据类型的表达式转换为另一种数据类型的表达式。
     语法
CAST (expression AS data_type [ (length ) ] )
功能分解步骤
1. CAST(id AS VARCHAR(20)) 将 id转换为类型 VARCHAR(20),若 CAST(2011 AS VARCHAR(20))转换结果为 '2011'
   如我想取今天生成的所有数据对于时间比对有三种方法:
    1.1 用cast:cast(getdate() as date)=cast(a.CreateTime as date)
    1.2 Month(getdate())=Month(a.CreateTime) and day(getdate())=day(a.CreateTime)
    1.3 convert(char(10),getdate(),120)=convert(char(10),a.CreateTime,120)
2.case,case when语法如何使用呢
  举例:
    select 
         case SuervyTitle.SuervyTypeId when 1 then '产品'
	 else '未知' end
    from SuervyTitle
   重点是:必须要有 End ,Else写不写都可以,如果不写esle不满足条件的会以null填充
3. Exists 对于Exists,不得不提In
   select * from Customer where OpenId in(select OpenId from JoinNumber)  这样一个子查询就很明显的阐述In可以
   有返回值的,但是Exists是没有的,Exists返回的是true或者false
   SELECT *
  FROM [abbottdiabeteswechat].[dbo].[DD_CustomerAddress] DDC
  where EXISTS(SELECT 1 FROM #D WHERE #D.OpenId=DDC.OpenId)
  这也是一个子查询机制,exists在表数据多的时候要比in快,因为exists可以用到索引,如果上例中子查询中的where条件后面   的字段带索引就会比in快 ,为什么会select 1 呢 就是不在乎返回什么只要查询的出来就可以,曾经我犯过一个错误
 IF exists(select count(1) from Customer) 因为count(1)如果没有值的话也会返回0,所以这个exists返回的就是真,if语句    会永远进去。注意注意!
4.sql 事务
 事务其实概念很简单 就是一起执行,中间出错就回滚,主要是写法笔者比较陌生,看了大神的代码又跟try糅合在一起
 
        BEGIN -- 首先外面先来个begin end
            begin try-- 然后放try
                  begin tran
                  commit
            end try
            begin catch--有try就有catch
                rollback--回滚
            end catch
        END
博客里又练了一遍写法嘻嘻
5.NEWID()
 这个NEWID()方法最近经常使用,是随机排序的作用,对于从数据库抽题后随机对题目和选项排序,很方便
 order by NEWID()