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;