T-SQL高级函数的应用

---- 数据库 T-SQL 应用 ----
-- 字符串函数 --
SELECT CHARINDEX('Benet','My  Benet Course',1 )
-- 用来寻找一个指定的字符串在另一个字符串中的起始位置 --
SELECT LEN('SQL Server 课程 ')
-- 返回传递给它的字符串长度 --
SELECT LTRIM ('  周智宇   ')
-- 清除字符左边的空格 --
SELECT RTRIM ('  周智宇   ')
-- 清除字符右边的空格 --
 
SELECT RIGHT(' 买卖提 . 吐尔松 ',3)
-- 从字符串右边返回指定数目的字符 --
SELECT REPLACE(' 莫乐可切 . 杨可 ',' ',' ')
-- 替换一个字符串中的字符 --
 
 
-- 查询用户 13701418965 在未缴费的市话 --
Select ' 用户 '+phonenumber+' 市话费用 '+cast(charge as varchar(10))+' ' AS 市话费用
From accountbill
Where phonenumber='13701418965' AND
IsPaid = 0 AND calltype=0
 
--- 日期函数 ---
SELECT GETDATE()
-- 取得当前的系统日期 --
SELECT DATEADD(mm,4,' 01/01/1999 ')
-- 将指定的数值添加到指定的日期部分后的日期 --
 
SELECT  DATEDIFF(mm,' 01/01/1999 ', '05/01/1999')
-- 两个日期之间的指定日期部分的区别 --
 
SELECT DATENAME(dw, ' 01/01/2000 ')
-- 日期中指定日期部分的字符串形式 --
 
SELECT DATEPART(day, ' 01/15/2000 ')
-- 日期中指定日期部分的整数形式 --
 
 
 
------####################################-------------
-- 显示用户 13701418965 2008 6 月份的通话记录的通话时长 --
Select ' 用户 '+phonenumber+' 通话时长 '+cast(datediff(mi,starttime,endtime) as varchar(10))+' 分钟 ' as 通话时长
From "history-call"
Where phonenumber='13701418965'
--------------------------------------------------------
 
 
SELECT ABS(-43)
-- 取数值表达式的绝对值 --
 
SELECT CEILING(43.5)
-- 取大于或等于指定数值、表达式的最小整数 --
 
SELECT FLOOR(43.5)
-- 取小于或等于指定表达式的最大整数 --
 
SELECT POWER(5,2)
-- 取数值表达式的幂值 --
 
SELECT ROUND(43.543,1)
-- 将数值表达式四舍五入为指定精度 --
SELECT SIGN(-43)
-- 对于正数返回 +1 ,对于负数返回 -1 ,对于 0 则返回 0--
 
SELECT SQRT(9)
-- 取浮点表达式的平方根 --
 
 
----- 显示用户 13701418965 2008 6 月份的通话记录的通话时长 ( 通话时长精确到分钟,不到一分钟的按一分钟计算 .--
Select ' 用户 '+phonenumber+' 通话时长 '+cast(ceiling(datediff(ss,starttime,endtime)/60.0) as varchar(10))+' 分钟 ' as 通话时长   From "history-call"  Where phonenumber='13701418965'
 
 
--************* 系统函数 *******************----
 
 
SELECT CONVERT (VARCHAR (5),12345)
--- 数据类型转换 ----
 
SELECT cast(' 2009-03-17 ' as datetime)
--- 数据类型转换,与 convert 相比语法较简单,转换功能也少 --
 
SELECT CURRENT_USER
--- 返回当前用户的名字 --
 
SELECT DATALENGTH (' 中国 A 联盟 ')
--- 返回用于指定表达式的字节数 --
 
SELECT HOST_NAME()
--- 返回当前用户所登录的计算机名字 ---
 
SELECT SYSTEM_USER
-- 返回当前所登录的用户名称 --
 
 
SELECT USER_NAME(1)
--- 从给定的用户 ID 返回用户名 --
 
--******************************-------
-- 查询用户的欠费账单记录,要求并显示用户号码和欠费信息
-- 查询过程是在 accountbill 表里查询 ispaid=0 表示未缴费的账单, calltype=0 市话,
--calltype=1 长话 ,charge 金额, accounttime 为账单时间
-- 显示用户 13701418965 欠费账单中的市话费用
Select ' 用户 '+phonenumber+' '+CAST (DATEPART(YEAR,accounttime) as Varchar(10))+' '+ CAST (DATEPART(MONTH,accounttime) as Varchar(10))+' 月发生市话费用 '+cast(charge as varchar(10))+' '
From accountbill
Where phonenumber='13701418965' AND
IsPaid = 0 AND calltype=0 Order By accounttime
 
--- 显示用户 13701418965 欠费账单中的长话费用 ---
Select ' 用户 '+phonenumber+' '+CAST (DATEPART(YEAR,accounttime) as
Varchar(10))+' '+ CAST (DATEPART(MONTH,accounttime) as Varchar(10))+'
月发生长话费用 '+CAST(charge as varchar(10))+' '
From accountbill Where phonenumber ='13701418965' AND
IsPaid = 0 AND calltype=1 Order By accounttime
 
-- 滞纳金是超期的天数×欠费金额×1%来计算。用户缴费最后期限
-- 是用户账单时间所在月份的下个月的26日
-- 滞纳金是超期的天数×欠费金额×1%来计算。用户缴费最后期限
-- 是用户账单时间所在月份的下个月的26日。
 
 
-- 根据账单日期得到账单缴费最后日期
 
-- 计算缴费日期与账单最后日期的超期天数
-- 得出欠费天数和欠费的金额
-- 如果超期天数大于 0 ,则滞纳金 = 超期天数×欠费金额
Select DateDiff(dd,Cast((cast(year(Dateadd(mm,1,accounttime))
 as varchar(10))+'-'+cast(MONTH(Dateadd(mm,1,accounttime))
as varchar(10))+'-26 00:00:00')
as datetime),Cast('2008-10-31 15:20:00'
as datetime))
as 欠费天数 ,charge
as 金额 ,accounttime
as 账单日期
From accountbill
Where phonenumber='13701418965'
 
--*************** 聚合 ********************----
-- 案例需求 : 查询用户‘ 13701418965 的合计欠费金额 --
 
Select Phonenumber,Sum(CHARGE)
From accountbill
Where isPaid=0 AND phoneNumber='13701418965'
--phonenumber' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
 
 
Select Sum(CHARGE)
From accountbill
Where isPaid=0 AND phoneNumber='13701418965'
Go
 
-- 历史账单中 2008 6 月份的用户平均话费 --
Select  Avg(CHARGE) as 平均话费
From "history-accountbill"
Where accounttime between '2008-06-01 00:00:00' AND '2008-06-30 23:59:59'
 
--- 查询 2008 6 月电话话费单笔最高费用和单笔最低费用 --
Select Max(CHARGE) as 单笔最高话费 ,Min(CHARGE) as 单笔最低话费
From "history-accountbill"
Where accounttime
 between '2008-06-01 00:00:00' and '2008-06-30 23:59:59'
 
-- Tariffsmall 数据库中查询欠费账单数,该如何统计账单个数 :--
Select Count(*)  as 欠费账单数
From accountbill
Where ispaid=0
-- 如果查询欠费用户数,该如何统计不同用户号码的数量:
Select Count(Distinct phonenumber)  as 欠费用户数
From accountbill
 Where ispaid=0
 
---**** 分组汇总 ****---
-- 要统计不同课程的平均分数。首先把相同的 CourseID 都分为一组,
-- 然后把这些相同组对应的分数值再使用前面的聚合函数取平均值
Select CourseID, Avg(Score)  as 课程平均成绩
From Score
Group By CourseID
 
--*** 查询 08 2 月到 7 月的客户账单合计费用 **--
Select CAST (DATEPART(YEAR,paytime) as varchar(10))+' '+ CAST (DATEPART(MONTH,paytime) as varchar(10))+' ' AS 日期 ,Sum(CHARGE) 合计费用
From "history-accountbill" Where isPaid<>0 AND
paytime between '2008-02-01 00:00:00' and '2008-7-31 23:59:59'
Group By CAST (DATEPART(YEAR,paytime) as varchar(10))+' '+ CAST (DATEPART(MONTH,paytime) as Varchar(10))+' '
 
 
---** 内连接 **--
USE AdventureWorks ;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product as p
INNER JOIN Sales.SalesOrderDetail as sod
ON (p.ProductID = sod.ProductID)
ORDER BY p.Name ;
 
 
--** 左外连接 **--
USE AdventureWorks ;
GO
SELECT p.Name, sod.SalesOrderID
FROM Production.Product p
LEFT OUTER JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
ORDER BY p.Name ;
 
--** 右外连接 **--
USE AdventureWorks;
GO
SELECT st.Name AS Territory, sp.SalesPersonID
FROM Sales.SalesTerritory st
RIGHT OUTER JOIN Sales.SalesPerson sp
ON st.TerritoryID = sp.TerritoryID ;
 
 
 
 
 
 
 
 
 
 
 
 
 

你可能感兴趣的:(数据库,函数,应用,高级,休闲)