之前已经分享了一部分内容
方法一
--SQL中的相除
SELECT
CASE WHEN ISNULL(A-B,0)=0 THEN ''
ELSE CAST(CONVERT(DECIMAL(18,2),A*100.0/(A-B)) AS VARCHAR(10))+'%'
END AS '百分数' --FROM 表
这里我们先要判断被除数是否为0,如果为0给出一个想输出的结果,这里我们返回空白(是字符类型,不是NULL),在不为0的时候就给出具体的计算公式,然后转换成字符类型再和“%”进行拼接。例如:
SELECT
CASE WHEN ISNULL(5-2,0)=0 THEN ''
ELSE CAST(CONVERT(DECIMAL(18,2),5*100.0/(5-2)) AS VARCHAR(10))+'%'
END AS '百分数' --FROM 表
返回的结果:
方法二
SELECT
(CONVERT(VARCHAR(20),ROUND(41*100.0/88,3))+'%') AS '百分比'
--FROM A
执行结果:
11、四舍五入ROUND函数
ROUND ( numeric_expression , length [ ,function ] )
SELECT ROUND(150.45648, 2);
--保留小数点后两位,需要四舍五入
--结果:
150.46000
SELECT ROUND(150.45648, 2, 0);
--保留小数点后两位,0为默认值,表示进行四舍五入
--结果:
150.46000
SELECT ROUND(150.45648, 2, 1);
--保留小数点后两位,不需要四舍五入,这里除0以外都是有同样的效果,
--与Oracle的TRUNC函数效果相同
--结果:
150.45000
SELECT ROUND(150.45648, 2, 2);
--保留小数点后两位,不需要四舍五入,这里除0以外都是有同样的效果,
--与Oracle的TRUNC函数效果相同
--结果:
150.45000
12、对字段出现NULL值的处理
方法一
--CASE
SELECT
CASE WHEN '字段名' IS NULL THEN 'NULL'
ELSE CONVERT(VARCHAR(20),'字段名1') END
AS 'NewName'
--结果:
字段名1
SELECT CASE WHEN NULL IS NULL THEN 'N'
ELSE CONVERT(VARCHAR(20),NULL) END
AS 'NewName'
--结果:
N
方法二
--SQL Server 2005:COALESCE
SELECT COALESCE('字符串类型字段','N') AS 'NewName'
--结果:
字符串类型字段
SELECT COALESCE(CONVERT(VARCHAR(20),'非字符串类型字段'),'N') AS 'NewName'
--结果:
非字符串类型字段
SELECT COALESCE(CONVERT(VARCHAR(20),NULL),'N') AS 'NewName'
--结果:
N
--COALESCE,返回其参数中的第一个非空表达式
SELECT COALESCE(NULL,NULL,1,2,NULL)
--结果:
1
SELECT COALESCE(NULL,11,12,13,NULL)
--结果:
11
SELECT COALESCE(111,112,113,114,NULL)
--结果:
111
13、COUNT的几种情况
--以下三种方法均可统计出表的记录数
--第一种
select count(*) from tablename
--第二种
select count(ID) from tablename
--第三种,1换成其它值也是可以的
select count(1) from tablename
14、UNION ALL多表插入
把两个相同结构的表union后插入到一个新表中,
select *
into table_new
from table_1
union all
select * from table_2
15、查看数据库缓存的SQL
use master
declare @dbid int
Select @dbid = dbid from sysdatabases
where name = 'SQL_ROAD'--修改成数据库的名称
select
dbid,UseCounts ,RefCounts,CacheObjtype,ObjType,
DB_Name(dbid) as DatabaseName,SQL
from syscacheobjects
where dbid=@dbid
order by dbid,useCounts desc,objtype
我们可以看到数据库中当前正在运行的SQL有哪些
16、删除计划缓存
--删除整个数据库的计划缓存
DBCC FREEPROCCACHE
--删除某个数据库的计划缓存
USE master
DECLARE @dbid INT
SELECT @dbid=dbid FROM sysdatabases WHERE NAME = 'SQL_ROAD'
DBCC FLUSHPROCINDB (@dbid)
PRINT 'SQL'+CHAR(13)+'ROAD'
PRINT 'SQL'+CHAR(10)+'ROAD'
PRINT 'SQL'+CHAR(9)+'ROAD'
如果将查询结果以文本格式显示,而不是网格格式显示,SELECT语句也适用,我们先将查询结果改成以文本格式显示
--以文本格式显示结果
SELECT 'SQL'+ CHAR(10)+'ROAD'
SELECT 'SQL'+ CHAR(13)+'ROAD'
SELECT 'SQL' + CHAR(10) + CHAR(13) + 'ROAD'
结果如下:
18、TRUNCATE TABLE [Table Name]
TRUNCATE 是SQL中的一个删除数据表内容的语句,用法是:
TRUNCATE TABLE [Table Name] 速度快,而且效率高,因为:
如果想保留标识计数值,请改用 DELETE。
如果要删除表定义及其数据,请使用 DROP TABLE 语句。
19、常用系统检测脚本
--查看内存状态
dbcc memorystatus
--查看哪个引起的阻塞,blk
EXEC sp_who active
--查看锁住了那个资源id,objid
EXEC sp_lock
还有如何查看查询分析器的SPID,可以在查询分析器的状态栏看到,比如sa(57),这就表示当前查询分析器SPID为57,这样在使用profile的时候就可以指定当前窗体进行监控。状态栏在查询窗口的右下角。
20、获取脚本的执行时间
declare @timediff datetime
select @timediff=getdate()
select * from Suppliers
print '耗时:'+ convert(varchar(10),datediff(ms,@timediff,getdate()))
结果如下:
在状态栏是不会精确到毫秒的,只能精确到秒
这个脚本可以更加有效的查看SQL代码的执行效率。
以上就是今天分享给大家一些比较实用的SQL脚本,以后想到了其他内容再分享给大家,好东西记得分享转发呀~
关注SQL数据库开发公众号,在后台回复关键字:资料领取,可以获取一份精心整理的技术干货。