日常工作中收集整理的MSSQL 技巧

1、只复制一个表的结构

select * into [tableName1] from [tableName2] -- 表的复制
select
top 0 * into [tableName1] from [tableName2] -- top 0 的妙用

select * into b from a where 1<>1 --where 1<>1
select top 2 * from dbo.table1 order by newid() --随即取纪录

--SQL 插入语句得到自动生成的递增ID 值
insert into Table1(Name,des,num) values ('ltp','thisisbest',10);
select @@identity as 'Id'

--实现是1 或0 想显示为男或女
select name,Sex=
case Sex
when '1' then '男'
when '0' then '女'
end
from Tablename

--嵌套子查询
select a,b,c from Table1 where a IN (select a from Table2)

--显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate
from tablename a,(select max(adddate) adddate from tablename where
tablename.title=a.title) b

--随机提取条记录的例子
SQL Server:Select Top 10 * From Tablename Order By NewID()
Access:Select Top 10 * From Tablename Order By Rnd(ID)
--Rnd(ID) 其中的ID 是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段UserName)
Select Top 10 * From 表Order BY Rnd(Len(UserName))
MySql:Select * From 表Order By Rand() Limit 10

--在同一表内找相同属性的记录
select UserID from Accounts_Users
where UserName is not null
group by UserID
having count (*)>1

--查询类别所有的产品对应数据
SELECT CategoryName,ProductName
FROM Categories LEFT JOIN Products
ON Categories.CategoryID = Products.CategoryID;

--按范围查询编号在2 到5 之间的用户信息
select * from UserValue where UserID between 2 and 5

--日程安排提前5 分钟提醒
Select * from TabSchedule where datediff(minute,getdate(),开始时间)<5

--得出某日期所在月份的最大天数
SELECT DAY(DATEADD(dd, -DAY('2008-02-13'),DATEADD(mm, 1, '2008-02-13'))) AS 'DayNumber'

--按姓氏笔画排序
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as

--通配符的一些用法
 select * from tablename where column1 like '[A-M]%'
--这样可以选择出column 字段中首字母在A-M 之间的记录

select * from tablename where column1 like '[ABC]%'
--这样可以选择出column 字段中首字母是A 或者B 或者C 的记录

select * from tablename where column1 like '[A-CG]%'
--这样可以选择出column 字段中首字母在A-C 之间的或者是G 的记录

select * from tablename where column1 like '[^C]%'
--这样可以选择出column 字段中首字母不是C 的记录


 

注:数据库为SQL Server
①模糊查询__在好几个字段中模糊查询某字符串
SELECT userName, name, tel, email, pwd
FROM AD_APPLY
WHERE (userName + name + tel + email + pwd LIKE '%AXzhz%')
【重点】最后一句,所有字段名用"+"连接起来.

②模糊查询_Like和Left,,,,这两条语句执行结果相同
SELECT *
FROM bbs_forums
WHERE (LTRIM(name) LIKE '嘉年华'%')

SELECT *
FROM bbs_forums
WHERE (LEFT(LTRIM(name), 3) = '嘉年华')
【重点】Like我就不多说了,先看Left函数:
Left(要查询的列名,左起的前几个字符)='前几个字符为(二声)什么'
再看Ltrim函数,这个简单了,去除某字段的左边的空格

取两个集合中不相同的纪录

select  distinct bookingno from booking where lastupdatedon >='2009-08-26'

except
select  distinct bookingno
from bookingparty
where bookingno in(
select  distinct bookingno from booking where lastupdatedon >='2009-08-26'
)




 

 

HTML

原文地址:https://www.cnblogs.com/zlddtt/p/1504499.html