欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-01 23:32:46
SQL时间区间条件查询三种方法比较 在某一时间区间条件的查询 后来再了一次测试,数据比较少,大概500条数据,结果如下: declare @ct datetime...

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;