----
数据库
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 ;