Sql server2008基础操作

来源:互联网 发布:js canvas api 编辑:程序博客网 时间:2024/05/22 14:10

1: SQL server 时间格式化查询

-- 日期格式化: 03 10 2014 11:01AM

Select CONVERT(varchar(100), GETDATE(), 0)
-- 年 14:月份 03: 日:10
-- 
-- 日期格式化: 03/10/14
Select CONVERT(varchar(100), GETDATE(), 1)
-- 日期格式化: 14.03.10
Select CONVERT(varchar(100), GETDATE(), 2) 
-- 日期格式化: 10/03/14
Select CONVERT(varchar(100), GETDATE(), 3)
-- 日期格式化: 10.03.14
Select CONVERT(varchar(100), GETDATE(), 4) 
-- 日期格式化: 10-03-14
Select CONVERT(varchar(100), GETDATE(), 5) 
-- 日期格式化:  10 03 14 
Select CONVERT(varchar(100), GETDATE(), 6) 
-- 日期格式化: 03 10, 14
Select CONVERT(varchar(100), GETDATE(), 7)
-- 日期格式化: 时分秒 11:10:11
Select CONVERT(varchar(100), GETDATE(), 8) 
-- 日期格式化:  03 10 2014 11:11:19:067AM
Select CONVERT(varchar(100), GETDATE(), 9) 
-- 日期格式化: 03-10-14
Select CONVERT(varchar(100), GETDATE(), 10) 


Select CONVERT(varchar(100), GETDATE(), 11) 
Select CONVERT(varchar(100), GETDATE(), 12) 
Select CONVERT(varchar(100), GETDATE(), 13) 
Select CONVERT(varchar(100), GETDATE(), 14) 
Select CONVERT(varchar(100), GETDATE(), 20) 
Select CONVERT(varchar(100), GETDATE(), 21) 
Select CONVERT(varchar(100), GETDATE(), 22) 
Select CONVERT(varchar(100), GETDATE(), 23) 
Select CONVERT(varchar(100), GETDATE(), 24) 
Select CONVERT(varchar(100), GETDATE(), 25) 
Select CONVERT(varchar(100), GETDATE(), 100) 
Select CONVERT(varchar(100), GETDATE(), 101) 
Select CONVERT(varchar(100), GETDATE(), 102) 
Select CONVERT(varchar(100), GETDATE(), 103) 
Select CONVERT(varchar(100), GETDATE(), 104)  
Select CONVERT(varchar(100), GETDATE(), 105) 
Select CONVERT(varchar(100), GETDATE(), 106) 
Select CONVERT(varchar(100), GETDATE(), 107) 
Select CONVERT(varchar(100), GETDATE(), 108)  
Select CONVERT(varchar(100), GETDATE(), 109) 
Select CONVERT(varchar(100), GETDATE(), 110) 
Select CONVERT(varchar(100), GETDATE(), 111) 


Select CONVERT(varchar(100), GETDATE(), 112) 


--10 03 2014 11:13:03:050
Select CONVERT(varchar(100), GETDATE(), 113) 
--11:12:55:550
Select CONVERT(varchar(100), GETDATE(), 114) 


--2014-03-10 11:12:45
Select CONVERT(varchar(100), GETDATE(), 120) 


--2014-03-10 11:12:04.473
Select CONVERT(varchar(100), GETDATE(), 121) 


-- 2014-03-10T11:11:45.880
Select CONVERT(varchar(100), GETDATE(), 126) 


--  9 ????? ?????? 1435 11:11:36:583AM
Select CONVERT(varchar(100), GETDATE(), 130) 


--  9/05/1435 11:07:38:443AM
Select CONVERT(varchar(100), GETDATE(), 131) 


常用:
-- : 时:分:秒 11:05:42
Select CONVERT(varchar(100), GETDATE(), 8)
-- : 时:分:秒 11:05:42
Select CONVERT(varchar(100), GETDATE(), 24) 
-- : 时:分:秒 11:05:42
Select CONVERT(varchar(100), GETDATE(), 108) 
--  140310
Select CONVERT(varchar(100), GETDATE(), 12) 
-- 2014-03-10

Select CONVERT(varchar(100), GETDATE(), 23) 


--1:replace 函数
--第一个参数你的字符串,第二个参数你想替换的部分,第三个参数你要替换成什么
select replace('lihan','a','b')
                                                                 
 
--2:substring函数
--第一个参数你的字符串,第二个是开始替换位置,第三个结束替换位置
select substring('lihan',0,3);
 


 
-- 3:charindex函数
-- 第一个参数你要查找的char,第二个参数你被查找的字符串 返回参数一在参数二的位置
select  charindex('a','lihan')
 
 
--4:ASCII函数
-- 返回字符表达式中最左侧的字符的 ASCII 代码值。
select ASCII('lihan')
 


 
--5:nchar函数
--根据 Unicode 标准的定义,返回具有指定的整数代码的 Unicode 字符。
--参数是介于 0 与 65535 之间的正整数。如果指定了超出此范围的值,将返回 NULL。
select nchar(3213)
-- unicode字符
 
 
-- 6:soundex
-- 返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性。
SELECT SOUNDEX ('lihan'), SOUNDEX ('lihon');
 


 
--7:char
--参数为介于 0 和 255 之间的整数。如果该整数表达式不在此范围内,将返回 NULL 值。
SELECT char(125)
 
 
--8:str函数
--第一个参数必须为数字,第二个参数表示转化成char型占的位置,小于参数一位置返回*,大于右对齐
SELECT str(12345,3)
 


SELECT str(12345,12)
 
   
--9:difference函数
--返回一个整数值,指示两个字符表达式的 SOUNDEX 值之间的差异。
--返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等:0 表示几乎不同或完全不同,4 表示几乎相同或完全相同。
SELECT difference('lihan','liha')
 


 
--10:stuff函数(四个参数)
-- 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
SELECT stuff('lihan',2,3,'lihan')
 


-- 11:left函数
-- 返回最左边N个字符,由参数决定
select left('lihan',4)
 
 


-- 12 right函数
--返回最右边N个字符,由参数决定
select right('lihan',4)
 


-- 13:replicate函数
--我的认为是把参数一复制参数二次
select replicate('lihan',4)
 


--14:len函数
--返回参数长度
 
select len('lihan')
 
--15:reverse函数
--反转字符串
select reverse('lihan')




-- 16:lower和upper函数
-- 参数大小写转化
-- 
select lower(upper('lihan'))
 


-- 17:ltrim和rtrim函数
删除左边空格和右面空格


select ltrim('    lihan        ')
 
select rtrim('    lihan')




 


追加:
排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数:
1. row_number
2. rank
3. dense_rank
4. ntile   
    下面分别介绍一下这四个排名函数的功能及用法。在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示:


图1


其中field1字段的类型是int,field2字段的类型是varchar


一、row_number


    row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示: 
select row_number() over(order by field1) as row_number,* from t_table


    上面的SQL语句的查询结果如图2所示。


图2


    其中row_number列是由row_number函数生成的序号列。在使用row_number函数是要使用over子句选择对某一列进行排序,然后才能生成序号。


    实际上,row_number函数生成序号的基本原理是先使用over子句中的排序语句对记录进行排序,然后按着这个顺序生成序号。over子句中的order by子句与SQL语句中的order by子句没有任何关系,这两处的order by 可以完全不同,如下面的SQL语句所示: 
select row_number() over(order by field2 desc) as row_number,* from t_table order by field1 desc


    上面的SQL语句的查询结果如图3所示。


图3
    我们可以使用row_number函数来实现查询表中指定范围的记录,一般将其应用到Web应用程序的分页功能上。下面的SQL语句可以查询t_table表中第2条和第3条记录:
with t_rowtable
as
(
    select row_number() over(order by field1) as row_number,* from t_table
)
select * from t_rowtable where row_number>1 and row_number < 4 order by field1


    上面的SQL语句的查询结果如图4所示。


图4
    上面的SQL语句使用了CTE,关于CTE的介绍将读者参阅《SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL》。
    另外要注意的是,如果将row_number函数用于分页处理,over子句中的order by 与排序记录的order by 应相同,否则生成的序号可能不是有续的。
    当然,不使用row_number函数也可以实现查询指定范围的记录,就是比较麻烦。一般的方法是使用颠倒Top来实现,例如,查询t_table表中第2条和第3条记录,可以先查出前3条记录,然后将查询出来的这三条记录按倒序排序,再取前2条记录,最后再将查出来的这2条记录再按倒序排序,就是最终结果。SQL语句如下: 
select * from (select top 2 * from( select top 3 * from t_table order by field1) a order by field1 desc) b order by field1


                                               
                                                                图5 
    上面的SQL语句查询出来的结果如图5所示。 


    这个查询结果除了没有序号列row_number,其他的与图4所示的查询结果完全一样。


二、rank


 


    rank函数考虑到了over子句中排序字段值相同的情况,为了更容易说明问题,在t_table表中再加一条记录,如图6所示。
                       
                                                          图6 
    在图6所示的记录中后三条记录的field1字段值是相同的。如果使用rank函数来生成序号,这3条记录的序号是相同的,而第4条记录会根据当前的记录 数生成序号,后面的记录依此类推,也就是说,在这个例子中,第4条记录的序号是4,而不是2。rank函数的使用方法与row_number函数完全相 同,SQL语句如下: 
select rank() over(order by field1),* from t_table order by field1


 


                                       
                                                                      图7 


    上面的SQL语句的查询结果如图7所示。 


三、dense_rank


    dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。如上面的例子中如果使用dense_rank函数,第4条记录的序号应该是2,而不是4。如下面的SQL语句所示:
select dense_rank() over(order by field1),* from t_table order by field1


    上面的SQL语句的查询结果如图8所示。


图8


    读者可以比较图7和图8所示的查询结果有什么不同
四、ntile
    ntile函数可以对序号进行分组处理。这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存放一定数量的记录。ntile函数为每条记 录生成的序号就是这条记录所有的数组元素的索引(从1开始)。也可以将每一个分配记录的数组元素称为“桶”。ntile函数有一个参数,用来指定桶数。下 面的SQL语句使用ntile函数对t_table表进行了装桶处理:
select ntile(4) over(order by field1) as bucket,* from t_table


                                          
                                                    


 
 

0 0
原创粉丝点击