SQL时间区间条件查询三种方法比较

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;
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐