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