--数据库字符串截取从1开始
--字符串函数
select ASCII(0) --48
select CHAR(48) --0
select lower('asMNddAD') --asmnddad
select upper('asMNddAD') --ASMNDDAD
select str(1245,9,3) -- 1245.000(数值1245转换为字符串,长度为9,小数点后有三位.小数点占一位,如果不够前边增加空格[自动四舍五入,默认值为10。小数点后最多保留16 位。默认不保留小数点后面的数字])
select ltrim(' asd mn ') --asd mn (左边空格去掉)
select rtrim(' asd mn ') -- asd mn(右边空格去掉)
select left('1234sddffgdsg',4) --1234(返回左边开始4个长度的字符串)
select right('1234sddffgdsg',3) --dsg(返回右边开始3个长度的字符串)
select substring('abcdefgmnp',2,3) --bcd(返回从左边第2个开始,长度是3的字符串)
select charindex('cd','abcdefgmnp') --3(返回左边字符串在右边出现的位置)
select charindex('ab','sabcdabmn',4) --6, 有参数4,则从第四个位置开始
select difference('xiaoming','123') --相似度匹配<这个是搜索高级用法>
select len('abcde ') --5,长度(只包含开头和中间的空格,不包含尾部空格)
select patindex('%ab%','mndabpabq') --4,从左边开始第一次匹配到的字符串位置,%:任意长度字符串
select patindex('ab%','mnab') --0
select patindex('%_a__b_%','0001a23bc45') --4,从左边开始第一次匹配到的字符串位置,_:一个长度的字符
select reverse('abcd') --dcba 反转
select 'a'+space(3)+'b' --a b,增加空格数
select stuff('abcde',2,3,'123') --a123e,从字符串abcde中的第2个位置删除3个增加123
select replace('abcmmabcnnabc','abc','123') --123mm123nn123,替换
--日期时间函数
select GETDATE() --当前时间
select GETUTCDATE() --世界标准时间
select dateadd(YEAR,2,GETDATE()) --当前时间加2年,QUARTER/qq,MONTH/mm,DAY/dd,HOUR/hh,MINUTE/mi,SECOND/ss
select datediff(year,'2017-01-10',getdate()) --当前时间减去2000年获取年份,QUARTER/qq,MONTH/mm,DAY/dd,HOUR/hh,MINUTE/mi,SECOND/ss
select datename(YEAR,GETDATE()) --当前年份(字符串),QUARTER/qq,MONTH/mm,DAY/dd,HOUR/hh,MINUTE/mi,SECOND/ss,dw(星期五),dy(一年中的第几天),wk(一年的第46个星期)
select datepart(YEAR,GETDATE()) --当前年份(数字),QUARTER/qq,MONTH/mm,DAY/dd,HOUR/hh,MINUTE/mi,SECOND/ss,dw(一周中的第几天[周日:1,周一:2]),dy(一年中的第几天),wk(一年的第46个星期)
select YEAR(GETDATE()) --当前年份(数字),和datepart相似,例如:day(),month()
--数学函数
select abs(-4) --绝对值
select PI() --pai
select COS(PI()/3) --0.5,相当于cos(60度)
select SIN(PI()/6) --0.5,相当于sin(30度)
select TAN(PI()/4) --1,相当于tan(45度)
select cot(PI()/4) --1,相当于cot(45度)
select aCOS(0.5) --返回0.5对应的弧度值,例如:pi()/3,即60度
select aSIN(0.5) --30度
select aTAN(1) --45度
select degrees(PI()/3) --60,即60度,返回弧度
select radians(60.0) --返回60度对应的弧度值
select EXP(2) --返回以自然常数e为底的指数函数
select LOG(EXP(2)) --返回以e为底的对数函数
select log10(10) --返回以10为底的对数函数
select ceiling(1.23) --向上取整(数值变大,-1.2变为-1,1.2变为2)
select floor(1.89) --向下取整(数值变小,-1.8变为-2,1.8变为1)
select power(2,10) --1024,指数运算
select sqrt(9) --3,开平方运算
select rand(2.3) --随机数(0-1),随机数种子可以不填,如果种子相同,产生的随机数则相同
--select ROUND(1) --

--convert()转换时间格式
select convert(nvarchar(1000),GETDATE()) --11 16 2018 4:52PM
select convert(nvarchar(1000),GETDATE(),101) --11/16/2018
select convert(nvarchar(1000),GETDATE(),102) --2018.11.16,常用
select convert(nvarchar(1000),GETDATE(),103) --16/11/2018
select convert(nvarchar(1000),GETDATE(),104) --16.11.2018
select convert(nvarchar(1000),GETDATE(),105) --16-11-2018
select convert(nvarchar(1000),GETDATE(),106) --16 11 2018
select convert(nvarchar(1000),GETDATE(),107) --11 16, 2018
select convert(nvarchar(1000),GETDATE(),108) --16:56:13,常用
select convert(nvarchar(1000),GETDATE(),109) --11 16 2018 4:57:02:030PM
select convert(nvarchar(1000),GETDATE(),110) --11-16-2018
select convert(nvarchar(1000),GETDATE(),111) --2018/11/16,常用
select convert(nvarchar(1000),GETDATE(),112) --20181116,常用
select convert(nvarchar(1000),GETDATE(),113) --16 11 2018 16:57:02:030
select convert(nvarchar(1000),GETDATE(),114) --16:57:02:030
select convert(nvarchar(1000),GETDATE(),120) --2018-11-16 16:57:37,常用
select convert(nvarchar(1000),GETDATE(),121) --2018-11-16 16:57:37.893,常用
select convert(nvarchar(1000),GETDATE(),126) --2018-11-16T16:57:37.893
select convert(nvarchar(1000),GETDATE(),130) -- 8 ???? ????? 1440 4:57:37:893PM
select convert(nvarchar(1000),GETDATE(),131) -- 8/03/1440 4:57:37:893PM
select cast(GETDATE() as nvarchar(10)) --11 18 2018,类型转换
select N'年龄:'+CAST(123 as nvarchar) --年龄:123,类型转换,[N 是为了使数据库识别Unicode 字符]

select NEWID() --生成guid
select isnumeric(2) --1,是否是数字,不是数字返回0
select ISNULL(null,'asdsd') --asdsd,前边为null,返回后边
select ISNULL('aaa','asdsd') --aaa,前边不是null,返回前边
select ISDATE('20180112') --1,判断能否转换成日期格式,如果能返回1,不能返回0

select ID,Name,ROW_NUMBER() over(order by Name) as rank from [ChinaArea].[dbo].[Region] --ROW_NUMBER()必须和 over(order by Name) as rank一起使用,增加一列rank
select ID,Name,CityCode,rank() over(order by Name) as rank from [ChinaArea].[dbo].[Region] --rank()排名,如果有两个第一名并列,则不会有第二名,下一个直接从3开始。即显示1,1,3[没有2,不连续]
select ID,Name,CityCode,dense_rank() over(order by Name) as rank from [ChinaArea].[dbo].[Region] --dense_rank()排名,如果有两个第一名并列,下一个从2开始。即显示1,1,2[连续数字]
--聚合函数,聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用
--count(),min(),max(),avg(),sum()
--distinct使用方法:根据distinct后边的字段去处重复.如果是distinct(name),则去除name相同的;如果是distinct name,sex,则去除name和sex相同的数据