20101102--SQL字符串函数 ,日期和时间函数

--------------------字符串函数-------------------------
--ASCII  返回字符串的首字母的ASCII编码 
select ASCII('w')
select ASCII('a')
select ASCII('s')
select ASCII('d')
select ASCII(name) from xueshengxinxi
select *from xueshengxinxi where ASCII(name)>200--查询name中ASCII码大于200的
--CHAR  将ASCII代码转换成对应字符  CHAR
select CHAR (101)
select CHAR(age) from xueshengxinxi
--INDEX
--CHARINDEX 查找字符串,返回符合条件的字符串首字母的索引,索引从1开始,返回0是没有找到
select CHARINDEX('%','qwe#r1%4tyyuiopasdfghjklzxcvbnm')
select CHARINDEX('2',test2) from xueshengxinxi
--PATINDEX 返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
-- 通配符   含义 
--   %     包含零个或多个字符的任意字符串。
--   _     任何单个字符。
--  [ ]    指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
--  [^]    不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。
select PATINDEX ('%%%','846!@#q78dwq6%478')
--字符串拼接 +号
select 'abc'+'def'+'gh'
--DIFFERENCE  返回相似度,
select DIFFERENCE('abcde','2')
--LEFT 返回字符串中从左边开始指定个数的字符。 LEFT
select LEFT('abcde',3)--后面数字是几就截取几个
select LEFT(test2,2) from xueshengxinxi
--RIGHT 返回字符串中从右边开始指定个数的字符。

--LEN 返回指定字符串表达式的字符数,其中不包含尾随空格。
select LEN(' 1234  ')
--LOWER 转化为小写
select LOWER('ASDFG')
--UPPER 转化大写

--LTRIM 去除字符串中的左边的空格,.net的trimstart
select LTRIM('    1  ')
--RTRIM 去除字符串中的右边的空格,

--REPLACE  替换,第一个参数是目标位置,第二个参数是要替换的字符段,第三个是要替换成的字符串。仅显示结果,这不会影响数据库的数据,
select REPLACE(test,'8','二分') from xueshengxinxi
--REPLICATE  复制,可以复制0-n次,相当于先剪切再复制
select REPLICATE('qwe',3)
--REVERSE  翻转
select REVERSE(name) from xueshengxinxi
--SOUNDEX 返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性
SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
--SPACE 空格 参数是几输入几个空格
select 'a'+SPACE(10)+'b'
--STR 返回由数字数据转换来的字符数据。参数1是原数值,参数2是字符串长度(包括小数点),参数3是截取到小数点后几位
select STR(213.450,5,2)
--STUFF 将字符串插入另一字符串。参数1原字符串,参数2指定删除和插入的开始位置,参数3指定要删除的字符数,参数4指定要插入的字符串
select STUFF('abc123gh',4,3,'def')
--SUBSTRING 从指定索引处截取指定长度的字符串。参数1原始字符串,参数2指定索引,参数2截取的字符串长度
select SUBSTRING(name,2,1) from xueshengxinxi

 

 1 -------------------日期和时间函数-------------------
 2 --DATEADD 给指定日期加上一个时间段
 3 select DATEADD(YEAR,2,'2008-10-1')--参数1时间类,参数2时间间隔,参数3指定的时间
 4 --DATEDIFF  求时间差,可以指定类型的
 5 select DATEDIFF(DAY,'2010-1-10','2010-5-1')--参数1指定类型,参数2第一个指定的时间,参数3第二个指定的时间
 6 --DATENAME  返回指定的时间类型的的数,返回的是字符型,可单独获取年月日时分秒
 7 select DATENAME(MONTH,'2013-6-20')
 8 --DATEPART 返回指定的时间类型的数,返回的是int型,可单独获取年月日时分秒
 9 select DATEPART(HOUR,'2013-6-20 12:10:50')
10 --DAY 返回日期中的时间是当月的那一天
11 select DAY('2012-4-19')
12 --MONTH 返回日期中的时间是当年的那一月
13 select MONTH('2011-9-15')
14 --YEAR 获取年份
15 select YEAR('2000-9-15')
16 --GETDATE 获取当前时间
17 select GETDATE()
18 --STSDATETIME 获取系统时间,
19 select SYSDATETIME()
20 --ISDATE 确定输入表达式是否为有效的日期或时间值。正确返回1,错误返回0
21 select ISDATE('2012-2-29')

 

 1 ------------------类型转换,转换函数-------------------
 2 --CAST    CONVERT 表达式不同
 3 --CAST
 4 select CAST(123 as varchar(10))
 5 select CAST(1.23 as int)
 6 select CAST(123 as decimal(10,2))
 7 select CAST('12.3' as decimal(10,2))
 8 --CONVERT
 9 select CONVERT(int,'123')
10 select CONVERT(decimal(10,3),'12.3')
11 --查询学生的名字和身份证上的出生日期
12 alter table xueshengxinxi add [card] varchar(20)
13 update xueshengxinxi set [card]='370305199211212511' where [No.] between 1 and 7
14 update xueshengxinxi set [card]='370305198907112511' where [No.] between 8 and 15
15 update xueshengxinxi set [card]='370305199001072511' where [No.] between 16 and 20
16 select *from xueshengxinxi
17 select name,(SUBSTRING([card],7,4)+''+substring([card],11,2)+''+substring([card],13,2)+'')出生日期 from xueshengxinxi  

 

posted @ 2014-11-02 11:33  Tirisfal  阅读(381)  评论(0编辑  收藏  举报