SqlServer学习(二)【知识点记录】 一时失言乱红尘 2021-06-26 16:06 419阅读 0赞 # 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()) **第二个参数为指定日期数据,第一个参数说明如下:** <table> <thead> <tr> <th align="left">日期部分</th> <th align="left">缩写</th> </tr> </thead> <tbody> <tr> <td align="left">year</td> <td align="left">yy, yyyy</td> </tr> <tr> <td align="left">quarter</td> <td align="left">qq, q</td> </tr> <tr> <td align="left">month</td> <td align="left">mm, m</td> </tr> <tr> <td align="left">dayofyear</td> <td align="left">dy, y</td> </tr> <tr> <td align="left">day</td> <td align="left">dd, d</td> </tr> <tr> <td align="left">week</td> <td align="left">wk, ww</td> </tr> <tr> <td align="left">weekday</td> <td align="left">dw</td> </tr> <tr> <td align="left">hour</td> <td align="left">hh</td> </tr> <tr> <td align="left">minute</td> <td align="left">mi, n</td> </tr> <tr> <td align="left">second</td> <td align="left">ss, s</td> </tr> <tr> <td align="left">millisecond</td> <td align="left">ms</td> </tr> </tbody> </table> -------------------- # 一.替换 `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
还没有评论,来说两句吧...