----数据库T-SQL应用----
--字符串函数--
SELECT CHARINDEX('Benet','My Benet Course',1 )
--用来寻找一个指定的字符串在另一个字符串中的起始位置--
SELECT LEN('SQL Server课程')
--返回传递给它的字符串长度--
SELECT LTRIM (' 周智宇 ')
--清除字符左边的空格--
SELECT RTRIM (' 周智宇 ')
--清除字符右边的空格--
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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,'<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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 ;
转载于:https://blog.51cto.com/wangyanjie/304808