SQL应用技巧(整理中....)

1 复制表

 复制 整张表
 

select * into NewTableName from OldTableName

 只复制列名而不要内容

select * into NewTableName from OldTableName where 1=0

 表间数据复制

insert into Table1(zt) select titile from Table2

 

2 查找重复记录

  1.--查某一列(或多列)的重复值(只能查出重复记录的值,不能整个记录的信息)
  --如:查找stuid,stuname重复的记录

select stuid,stuname from stuinfo
group by stuid,stuname
having(count(*))>1

 

  2.--查某一列有重复值的记录(这种方法查出的是所有重复的记录,也就是说如果有两条记录重复的,就查出两条)
  --如:查找stuid重复的记录

  select * from stuinfo
  where stuid in (
  select stuid from stuinfo
  group by stuid
  having(count(*))>1
  )

 

3 记录搜索 

   开头到N条记录

Select Top N * From 表

  N到M条记录(要有主索引ID)

SELECT TOP M * FROM tablename WHERE id NOT IN (SELECT TOP N id FROM tablename)

 

4 表信息

   获取某一个表的所有字段

select name from syscolumns where id=object_id('表名')

   查看与某一个表相关的视图、存储过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

   查看当前数据库中所有存储过程

select name as 存储过程名称 from sysobjects where xtype='P'   

   查询某一个表的字段和数据类型

select column_name,data_type from information_schema.columns
where table_name = '表名' 

 

5 Excel与SQLServer交互

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
RECONFIGURE

 

select * from
openrowset('microsoft.jet.oledb.4.0','excel 5.0;hdr=yes;database=c:\b.xls',[bb$])

 

 6 sqlserver日期推算(年,季度,月,星期推算)

DECLARE @dt datetime
SET @dt=GETDATE()

DECLARE @number int
SET @number=3


--1.指定日期该年的第一天或最后一天
--第一天为1月1日、最后一天为12月31日都是固定的

--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'

--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'


--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
 CONVERT(char(8),
  DATEADD(Month,
   DATEPART(Quarter,@dt)*3-Month(@dt)-2,
   @dt),
  120)+'1')

--B. 季度的最后一天(CASE判断法)
SELECT CONVERT(datetime,
 CONVERT(char(8),
  DATEADD(Month,
   DATEPART(Quarter,@dt)*3-Month(@dt),
   @dt),
  120)
 +CASE WHEN DATEPART(Quarter,@dt) in(1,4)
  THEN '31'ELSE '30' END)

--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
 CONVERT(char(8),
  DATEADD(Month,
   1+DATEPART(Quarter,@dt)*3-Month(@dt),
   @dt),
  120)+'1')


--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')

--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')


--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)


--5.指定日期所在周的任意星期几
--A.  星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

--B.  星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值