因为最近的项目的存储过程都是由我做的,关于一些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()