SQL时间区间条件查询三种方法比较
在某一时间区间条件的查询
后来再了一次测试,数据比较少,大概500条数据,结果如下:
declare @ct datetime
set @ct=getdate()
SELECT * FROM [siso].[dbo].[Activity] WHERE ASDateTime < getDate() and AEDateTime > getDate();
select datediff(ms, @ct ,getdate()) as '查询时间(毫秒)'
(16 ms)
set @ct=getdate()
SELECT * FROM [siso].[dbo].[Activity] WHERE getDate() BETWEEN ASDateTime AND AEDateTime;
select datediff(ms, @ct ,getdate()) as '查询时间(毫秒)'
(36 ms)
set @ct=getdate()
SELECT * FROM [siso].[dbo].[Activity] where datediff(S,ASDateTime,@ct)>0 AND datediff(S,AEDateTime,@ct)<0;
select datediff(ms, @ct ,getdate()) as '查询时间(毫秒)'
(50 ms)
SQL 中DATENAME()
的使用
1.获取星期(显示中文如:星期一)
Select DateName(dw,getdate())
2.获取季度
Select DateName(qq,getdate())
3.本年已过天数
Select Datename(dy,getdate())
4.本年第几个星期
Select Datename(wk,getdate())
第二个参数为指定日期数据,第一个参数说明如下:
日期部分 | 缩写 |
---|---|
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
dayofyear | dy, y |
day | dd, d |
week | wk, ww |
weekday | dw |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
一.替换 Null
值
1.COALESCE (expression_1, expression_2, ...,expression_n)
依次参考各参数表达式,遇到非null
值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。
使用COALESCE
在于大部分包含空值的表达式最终将返回空值。
在下面的示例中,显示包含三列有关某个雇员每年工资收入信息的 wages
表:hourly_wage
、salary
和 commission
。但是,每个雇员只能接受一种付款方式。若要确定支付给所有雇员的工资总额,请使用 COALESCE
函数接受在 hourly_wage
、salary
和 commission
中找到的非空值。
SELECT CAST(COALESCE(hourly_wage * 40 * 52,salary,commission * num_sales) AS money) AS 'Total Salary' FROM wages
2.ISNULL
使用
SELECT E.Name AS Employee, ISNULL(M.Name, 'NO MANAGER') AS Manager FROM EMP E LEFT JOIN EMP M ON E.EmployeeID = M.ManagerID
3.使用CASE ...WHEN...
SELECT E.Name AS Employee,
CASE WHEN M.Name IS NULL
THEN 'NO MANAGER'
ELSE M.Name END AS Manager
FROM EMP E LEFT JOIN EMP M
ON E.EmployeeID = M.ManagerID
二.重置主键Identity
USE demoDB
GO
DBCC CHECKIDENT('tblEmployee', RESEED , 0)
三. SQL Server中的Merge
use AllCityData
Merge into StudentTarget as T
Using StudentSource as S
On T.Id = S.Id
When Matched Then
Update Set T.Name = S.Name
When Not Matched Then --目标表中没有的ID,在原表中有,则插入相关数据
Insert (Id,Name )values(S.Id, S.Name)
When Not Matched By Source Then --目标表中存在,源表中不存在,则删除
Delete;
sqlserver
一次性删除master数据库中的所有用户添加的表
use master;
go
sp_msforeachtable @command1="drop table ?"
go