SqlServer数据库

1、判断数据库中是否存在,若存在,先删除后创建

if(object_id('tempdb..#temp_bill') is not null) begin drop table #temp_bill end;

1.1、删除student表

drop table student --删除表的数据和表的结构
truncate table student -- 只是清空表的数据,,但并不删除表的结构,student表还在只是数据为空

1.2删除序列

DROP SEQUENCE auto_increment_seq;--删除单个序列

DROP SEQUENCE Seq1, Seq2, Seq3; --删除多个序号

DROP SEQUENCE IF EXISTS MySequence;-- 如果存在就删除序列

2、日期函数

--(yy,yyyy 年;qq,q 季度;mm,m 月;dy,y年中的日;dd,d 日;wk,ww 周;dw,w星期;hh 小时;mi,n分钟;ss,s秒)
select DATEADD(DY,-1,'2023-04-27') dy,
	   DATEDIFF(D,'2023-04-26','2023-04-27') d,
       DATEPART(year, '2020-11-10') [datepart], --返回的是整数
       DATENAME(year, '2020-11-10') [datename]; --返回的是字符串
select GETDATE()
SELECT  CONVERT(nvarchar(10), DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1, GETDATE()) ), -1),121)--本周开始时间
SELECT  CONVERT(nvarchar(10), DATEADD(wk, DATEDIFF(wk,0,DATEADD(dd, -1, GETDATE()) ), 5),121)--本周结束时间
--本周第一天(星期一)
SELECT   DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
--本周最后一天(星期天)  
select   dateadd(wk,datediff(wk,0,getdate()),6)
--本周第一天(星期天)
SELECT DATEADD(day, 1 - DATEPART(weekday, getdate()), getdate()) AS FirstDayOfWeek
--本周最后一天(星期六)
SELECT DATEADD(day, 7 - DATEPART(weekday, getdate()), getdate()) AS LastDayOfWeek
--每月最后一天
SELECT DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, getdate()) + 1, 0)) AS LastDayOfMonth
--获取当前年的最后一天
select dateadd(year,datediff(year, 0, dateadd(year, 1, getdate())), -1)
--获取当前年的月数
SELECT number  日期 FROM MASTER..spt_values 
WHERE TYPE='P' and number>0 and number<=datepart(MM,convert(varchar(10),
dateadd(YEAR,datediff(YEAR,0,dateadd(YEAR,1,getdate())),-1),120))
--获取当前年的周数(只需更改datepart中的MM改成WK)

2-1、获取当前时间过去的12个月份

SELECT DISTINCT CONVERT(varchar(7), DATEADD(MONTH, -number, GETDATE()), 120) AS month
FROM master..spt_values
WHERE type = 'P'
AND number BETWEEN 0 AND 11
ORDER BY month ASC

3、窗口函数

在这里插入图片描述

select *,
sum(cast(a4 as int)) over(partition by a3),
ROW_NUMBER() over(partition by a3 order by a3)
from aaa where a2 = '王五'

4、将多行结果展示在同一行

4-1、FOR XML PATH 的作用是将查询结果集以XML形式展现,将多行的结果,展示在同一行,

select cityname from [dbo].[city] where pid = 3 FOR XML PATH('')

4-2、通过字符拼接后可以把xml信息清除,并以指定的字符进行分割:

select ','+ cityname  from [dbo].[city] where pid = 3 FOR XML PATH('')

4-3、STUFF(character_expression , start , length , replaceWith_expression)

select  pid,stuff((select ','+ cityname  from [dbo].[city] as c  where b.pid = c.pid  FOR XML PATH('')),1,1,'') 
as a from [dbo].[city] as b group by pid order by pid 

5、some,any,all的用法

SOME 和 ANY 是相同的,它们表示与子查询中的任何一个值进行比较即为 TRUE。
ALL 表示与子查询中的所有值进行比较都为 TRUE。
ALL:对所有数据都满足条件,整个条件才成立 ,例如:5000大于所有返回的薪水
ANY 和 SOME:只要有一条数据满足条件,整个条件成立,例如,5000大于薪水中的3000, 10000, 7000。SOME 的作用和 ANY 一样。

select * from bbb
where b2 > any(select b2  from bbb where b2 >= '2' and b2 <= '3')--some,any,all

5-1、找两个查询结果的交集

-- 第一个查询
SELECT column1, column2
FROM table1
WHERE condition1
-- 与第二个查询交集
INTERSECT
-- 第二个查询
SELECT column1, column2
FROM table2
WHERE condition2;

5-2、找两个查询结果的差集

返回第一个查询结果中存在,但在第二个查询结果中不存在的行。

-- 第一个查询
SELECT column1, column2
FROM table1
WHERE condition1
-- 与第二个查询交集
EXCEPT
-- 第二个查询
SELECT column1, column2
FROM table2
WHERE condition2;

6、行转列

select cs002,cs003,cs004,cs005 from f_ceshi(nolock)
--方法:
SELECT  cs002 '姓名',
max(CASE cs003 WHEN '语文' then cs004 ELSE 0 END) '语文',
max(CASE cs003 WHEN '数学' then cs004 ELSE 0 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值