1、字符串函数函数名称 参数 示例 说明ascii (字符串表达式 ) select ascii(abc) 返回 97返回字符串中最左侧的字符的 ASCII码。char (整数表达式 ) select char(100) 返回 d把 ASCII 码转换为字符。介于 0 和 255 之间的整数。如果该整数表达式不在此范围内,将返回 NULL 值。charindex(字符串表达式 1,字符串表达式 2,整数表达式)select charindex(ab,BCabTabD)返回 3select charindex(ab,BCabTabD,4)返回 6在字符串 2 中查找字符串 1,如果存在返回第一个匹配
2、的位置,如果不存在返回 0。如果字符串 1 和字符串 2中有一个是 null 则返回 null。可以指定在字符串 2 中查找的起始位置。difference(字符串表达式 1,字符串表达式 2)select difference(Green,Greene)返回 4返回一个 0 到 4 的整数值,指示两个字符表达式的之间的相似程度。0 表示几乎不同或完全不同,4 表示几乎相同或完全相同。注意相似并不代表相等left(字符串表达式,整数表达式)select left(abcdefg,2) 返回 ab返回字符串中从左边开始指定个数的字符。right(字符串表达式,整数表达式)select right
3、(abcdefg,2) 返回 fg返回字符串中从右边开始指定个数的字符。len (字符串表达式 )select len(abcdefg)返回 7select len(abcdefg ) 返回指定字符串表达式的字符数,其中不包含尾随空格。返回 7lower (字符串表达式 )select lower(ABCDEF)返回 abcdef返回大写字符数据转换为小写的字符表达式。upper (字符串表达式 )select upper(abcdef)返回 ABCDEF返回小写字符数据转换为大写的字符表达式。ltrim (字符串表达式 )select ltrim( abc)返回 abc返回删除了前导空格之后
4、的字符表达式。rtrim (字符串表达式 )select rtrim(abc )返回 abc返回删除了尾随空格之后的字符表达式。patindex(字符串表达式 1,字符串表达式 2)select patindex(%ab%,123ab456)返回 4select patindex(ab%,123ab456)返回 0select patindex(_ab%,123ab456)返回 1select patindex(_ab_,123ab456)返回 0在字符串表达式 1 中可以使用通配符,此字符串的第一个字符和最后一个字符通常是%。%表示任意多个字符,_表示任意字符返回字符串表达式 2 中字符串表
5、达式1 所指定模式第一次出现的起始位置。没有找到返回 0reverse (字符串表达式 )select reverse(abcde)返回 edcba返回指定字符串反转后的新字符串space (整数表达式 )select a+space(2)+b 返回 a b返回由指定数目的空格组成的字符串。str (float 型小数,总长 select str(123.451)返回 返回由数字转换成的字符串。返回字度, 小数点后保留的位数)123(123 前面有空格)select str(123.451,3)返回123select str(123.451,7,3)返回 123.451select str(1
6、23.451,7,1)返回 123.5select str(123.451,5,3)返回 123.5select str(123.651,2)返回*符数不到总长度的前面补空格,超过总长度的截断小数位。如果需要截断整数位则返回*。注意在截断时遵循四舍五入总长度。它包括小数点、符号、数字以及空格。默认值为 10。小数点后最多保留 16 位。默认不保留小数点后面的数字stuff(字符串表达式 1,开始位置,长度,字符串表达式 2)select stuff(abcdef,2,2,123)返回 a123def在字符串表达式 1 中在指定的开始位置删除指定长度的字符,并在指定的开始位置处插入字符串表达式
7、2。返回新字符串substring(字符串表达式,开始位置,长度)select substring(abcdef,2,2)返回 bc返回子字符串replace (字符串表达式 1,字符串表达式 2,字符串表达式 3)select replace(abcttabchhabc,abc,123)返回 123tt123hh123用字符串表达式 3 替换字符串表达式1 中出现的所有字符串表达式 2 的匹配项。返回新的字符串日期和时间函数函数名称 参数 示例 说明dateadd(日期部分,数字,日期)select dateadd(year,45,1990-12-11)返回 2035-12-11 00:00
8、:00.000select dateadd(month,45,1990-12-11)返回 1994-09-11 00:00:00.000select dateadd(mm,45,1990-12-11)返回 1994-09-11 00:00:00.000select dateadd(qq,12,1990-12-11)返回 1993-12-11 00:00:00.000select dateadd(hh,12,1990-12-11)返回 1990-12-11 12:00:00.000select dateadd(yy,-12,1990-12-11)返回 1978-12-11 00:00:00.00
9、0返回给指定日期加上一个时间间隔后的新的日期值。数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。日期:指定的原日期在此函数中 dw,dy,dd 效果一样都表示天datediff(日期部分,开始日期,结束日期)select datediff(yy,1990-12-11,2008-9-10)返回 18select datediff(mm,2007-12-11,2008-9-10)返回 9返回两个指定日期的指定日期部分的差的整数值。在计算时由结束日期减去开始日期在此函数中 dw,dy,dd 效果一样都表示天datename(日期部分,日期)sel
10、ect datename(mm,2007-12-11)返回 12select datename(dw,2007-12-11)返回星期二select datename(dd, 2007-12-11)返回 11返回表示指定日期的指定日期部分的字符串。dw 表示一星期中星期几,wk 表示一年中的第几个星期dy 表示一年中的第几天datepart(日期部分,日期)select datepart(mm,2007-12-11)返回 12select datepart(dw,2007-12-11)返回 3select datepart(dd, 2007-12-11)返回 11返回表示指定日期的指定日期部分的
11、整数。wk 表示一年中的第几个星期dy 表示一年中的第几天,dw 表示一星期中星期几,返回整数默认 1 为星期天getdate 无参数select getdate()返回 2009-04-28 18:57:24.153返回当前系统日期和时间。day (日期) select day(2007-12-11)返回 11返回一个整数,表示指定日期的天的部分。等价于 datepart(dd, 日期)month (日期)select month(2007-12-11)返回12返回一个整数,表示指定日期的月的部分。等价于 datepart(mm, 日期)year (日期)select year(2007-1
12、2-11)返回2007返回一个整数,表示指定日期的年的部分。等价于 datepart(yy, 日期)getutcdate无参数select getutcdate()返回 2009-04-28 10:57:24.153返回表示当前的 UTC(世界标准时间)时间。即格林尼治时间(GMT)日期部分(指定要返回新值的日期的组成部分。下表列出了 Microsoft SQL Server 2005 可识别的日期部分及其缩写。)日期部分 含义 缩写 year 年 yy, yyyyquarter 季 qq, qmonth 月 mm, mdayofyear 天(请看函数中的说明) dy, yday 天(请看函数
13、中的说明) dd, dweek 星期 wk, wwweekday 天(请看函数中的说明) dw, whour 小时 hhminute 分钟 mi, nsecond 秒 ss, smillisecond 毫秒 ms数学函数函数名称 参数 示例 说明abs (数值表达式 ) select abs(-23.4)返回 23.4 返回指定数值表达式的绝对值(正值)pi 无参数select pi()返回3.14159265358979返回 的值cos (浮点表达式 ) select cos(pi()/3)返回 0.5 返回指定弧度的余弦值sin (浮点表达式 ) select sin(pi()/6)返回
14、0.5 返回指定弧度的正弦值cot (浮点表达式 ) select cot(pi()/4)返回 1 返回指定弧度的余切值tan (浮点表达式 ) select tan(pi()/4)返回 1 返回指定弧度的正切值acos (浮点表达式 )select acos(0.5)返回1.0471975511966返回其余弦是所指定的数值表达式的弧度,求反余弦asin (浮点表达式 )select asin(0.5)返回 0.523598775598299返回其正弦是所指定的数值表达式的弧度,求反正弦atan (浮点表达式 )select atan(1)返回0.785398163397448返回其正切是所
15、指定的数值表达式的弧度,求反正切degrees (数值表达式 )select degrees(pi()/4) 返回45返回以弧度指定的角的相应角度。radians (数值表达式 )select radians(180.0)返回 3.1415926535897931返回指定度数的弧度值。注意如果传入整数值则返回的结果将会省略小数部分exp (浮点表达式 )select exp(4)返回54.5981500331442返回求 e 的指定次幂,e=2.718281log (浮点表达式 )select log(6)返回1.79175946922805返回以 e 为底的对数,求自然对数。Log10 (浮
16、点表达式 ) select log10(100)返回 2 返回以 10 为底的对数ceiling (数值表达式 )select ceiling(5.44)返回 6select ceiling(-8.44)返回-8返回大于或等于指定数值表达式的最小整数。floor (数值表达式 ) select floor(5.44)返回 5 返回小于或等于指定数值表达式的最大整数。select floor(-8.44)返回-9power(数值表达式1,数值表达式2)select power(5,2)返回 25 返回数值表达式 1 的数值表达式 2 次幂sqrt (数值表达式 ) select sqrt(25)
17、返回 5 返回数值表达式的平方根sign (数值表达式 )select sign(6)返回 1select sign(-6)返回-1select sign(0)返回 0表达式为正返回+1表达式为负返回-1表达式为零返回 0rand(整数表达式)select rand(100)返回0.715436657367485select rand()返回0.28463380767982select rand()返回0.0131039082850364返回从 0 到 1 之间的随机 float 值。整数表达式为种子,使用相同的种子产生的随机数相同。即使用同一个种子值重复调用 RAND() 会返回相同的结果。
18、不指定种子则系统会随机生成种子。round(数值表达式 ,长度,操作方式)select round(1236.555,2)返回 1236.560select round(1236.555,2,1)返回 1236.550select round(1236.555,0)返回 1237.000select round(1236.555,-1)返回 1240.000select round(1236.555,-1,1)返回 1230.000select round(1236.555,-2)返回 1200.000返回一个数值,舍入到指定的长度。注意返回的数值和原数值的总位数没有变化。长度:舍入精度。如果
19、长度为正数,则将数值舍入到长度指定的小数位数。如果长度为负数,则将数值小数点左边部分舍入到长度指定的长度。注意如果长度为负数,并且大于小数点前的数字个数,则将返回 0。如果长度为负数并且等于小数点前的数字个数且操作方式为四舍五入时,最前面的一位小于5 返回 0,大于等于 5 会导致错误出现,如果操作方法不是四舍五入时则不会出现错误,返回结果一律为 0。操作方式:默认为 0 遵循四舍五入,指定其select round(1236.555,-3)返回 1000.000select round(1236.555,-4)返回 0.000select round(5236.555,-4)出现错误sele
20、ct round(5236.555,-4,1)返回 0.000他整数值则直接截断。数据类型转换函数(以下两种函数功能类似,但是 convert 在进行日期转换时还提供了丰富的样式, cast 只能进行普通的日期转换)函数名称 参数 示例 描述convert(数据类型(长度),表达式,样式)select convert(nvarchar,123) 返回 123select N年龄:+convert(nvarchar,23)返回 年龄:23(注意:如果想要在结果中正确显示中文需要在给定的字符串前面加上 N,加 N 是为了使数据库识别 Unicode 字符)select convert(nvarch
21、ar ,getdate()返回 04 28 2009 10:21PMselect convert(nvarchar ,getdate(),101)返回 04/28/2009select convert(nvarchar ,getdate(),120)将一种数据类型的表达式显式转换为另一种数据类型的表达式。长度:如果数据类型允许设置长度,可以设置长度,例如varchar(10)样式:用于将日期类型数据转换为字符数据类型的日期格式的样式。见下表返回 2009-04-28 12:22:21select convert(nvarchar(10) ,getdate(),120)返回 2009-04-28
22、cast(表达式 as 数据类型(长度)select cast(123 as nvarchar)返回 123select N年龄:+cast(23 as nvarchar)返回 年龄:23将一种数据类型的表达式显式转换为另一种数据类型的表达式。日期类型数据转换为字符数据类型的日期格式的部分样式表 当两个不同数据类型的表达式用运算符组合后,数据类型优先级规则指定将优先级较低的数据类型优先转换为优先级较高的数据类型。 如果此转换不是所支持的隐式转换,则返回错误。 当两个操作数表达式具有相同的数据类型时,运算的结果便为该数据类型。如果需要把优先级高的数据类型转换为优先级低的数据类型时需要使用数据类型
23、转换函数进行显示转换。SQL Server 2005 对数据类型使用以下优先级顺序(先高后低):不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输入/输出 - 0 或 100 默认设置mon dd yyyy hh:miAM(或 PM)1 101 美国 mm/dd/yyyy2 102 ANSI yy.mm.dd3 103 英国/法国 dd/mm/yy4 104 德国 dd.mm.yy5 105 意大利 dd-mm-yy120ODBC 规范yyyy-mm-dd hh:mi:ss(24h)1、用户定义数据类型(最高)2 、sql_variant 3、xml 4、datetime 5、smal
24、ldatetime 6、float 7、real 8、decimal 9、money 10、smallmoney 11、bigint 12、int 13、smallint 14、tinyint 15、 bit 16、ntext 17、text 18、image 19、timestamp 20、uniqueidentifier 21、nvarchar(包括 nvarchar(max))22 、nchar 23、varchar (包括 varchar(max))24 、char 25、varbinary(包括 varbinary(max))26、binary(最低)sql 常用函数 一、字符转换函
25、数 1、ASCII() 返回字符表达式最左端字符的 ASCII 码值。在 ASCII()函数中,纯数字的字符串可不用括起来,但含其它字符的字符串必须用括起来使用,否则会出错。 2、CHAR() 将 ASCII 码转换为字符。如果没有输入 0 255 之间的 ASCII 码值,CHAR() 返回 NULL 。 3、LOWER()和 UPPER() LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。 4、STR() 把数值型数据转换为字符型数据。 STR (,length, ) length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的
26、 length 值为 10, decimal 缺省值为 0。 当 length 或者 decimal 为负值时,返回 NULL; 当 length 小于小数点左边(包括符号位)的位数时,返回 length 个*; 先服从 length ,再取 decimal ; 当返回的字符串位数小于 length ,左边补足空格。 二、去空格函数 1、LTRIM() 把字符串头部的空格去掉。 2、RTRIM() 把字符串尾部的空格去掉。 三、取子串函数 1、left() LEFT (, ) 返回 character_expression 左起 integer_expression 个字符。 2、RIGHT(
27、) RIGHT (, ) 返回 character_expression 右起 integer_expression 个字符。 3、SUBSTRING() SUBSTRING (, , length) 返回从字符串左边第 starting_ position 个字符起 length 个字符的部分。 四、字符串比较函数 1、CHARINDEX() 返回字符串中某个指定的子串出现的开始位置。 CHARINDEX (, ) 其中 substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回 0 值。 此函数不能用于 T
28、EXT 和 IMAGE 数据类型。 2、PATINDEX() 返回字符串中某个指定的子串出现的开始位置。 PATINDEX (, )其中子串表达式前后必须有百分号“%”否则返回值为 0。 与 CHARINDEX 函数不同的是,PATINDEX 函数的子串中可以使用通配符,且此函数可用于 CHAR、 VARCHAR 和 TEXT 数据类型。 五、字符串操作函数 1、QUOTENAME() 返回被特定字符括起来的字符串。 QUOTENAME (, quote_ character) 其中 quote_ character 标明括字符串所用的字符,缺省值为“”。 2、REPLICATE() 返回一个
29、重复 character_expression 指定次数的字符串。 REPLICATE (character_expression integer_expression) 如果 integer_expression 值为负值,则返回NULL 。 3、REVERSE() 将指定的字符串的字符排列顺序颠倒。 REVERSE () 其中 character_expression 可以是字符串、常数或一个列的值。 4、REPLACE() 返回被替换了指定子串的字符串。 REPLACE (, , ) 用string_expression3 替换在 string_expression1 中的子串 stri
30、ng_expression2。 5、SPACE() 返回一个有指定长度的空白字符串。 SPACE () 如果 integer_expression 值为负值,则返回 NULL 。 6、STUFF() 用另一子串替换字符串指定位置、长度的子串。 STUFF (, , ,) 如果起始位置为负或长度值为负,或者起始位置大于 character_expression1 的长度,则返回 NULL 值。 如果 length 长度大于 character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。 六、数据类型转换函数
31、 1、CAST() CAST ( AS length ) 2、CONVERT() CONVERT ( length , , style) 1)data_type 为 SQL Server 系统定义的数据类型,用户自定义的数据类型不能在此使用。 2)length 用于指定数据的长度,缺省值为 30。 3)把 CHAR 或 VARCHAR 类型转换为诸如 INT 或 SAMLLINT 这样的 INTEGER 类型、结果必须是带正号或负号的数值。 4)TEXT 类型到 CHAR 或 VARCHAR 类型转换最多为 8000 个字符,即 CHAR 或 VARCHAR 数据类型是最大长度。5)IMAGE
32、 类型存储的数据转换到 BINARY 或 VARBINARY 类型,最多为 8000 个字符。 6)把整数值转换为 MONEY 或 SMALLMONEY 类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。 7)BIT 类型的转换把非零值转换为 1,并仍以 BIT 类型存储。 8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。 9)用 CONVERT()函数的 style 选项能以不同的格式显示日期和时间。style 是将 DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由 SQL Server 系统提供的转换样式编号
33、,不同的样式编号有不同的输出格式。 七、日期函数 1、day(date_expression) 返回 date_expression 中的日期值 2、month(date_expression) 返回 date_expression 中的月份值 3、year(date_expression) 返回 date_expression 中的年份值 4、DATEADD() DATEADD (, , ) 返回指定日期 date 加上指定的额外日期间隔 number 产生的新日期。 5、DATEDIFF() DATEDIFF (, , ) 返回两个指定日期在 datepart 方面的不同之处,即 date
34、2 超过 date1 的差距值,其结果值是一个带有正负号的整数值。 6、DATENAME() DATENAME (, ) 以字符串的形式返回日期的指定部分此部分。由 datepart 来指定。 7、DATEPART() DATEPART (, ) 以整数值的形式返回日期的指定部分。此部分由 datepart 来指定。 DATEPART (dd, date) 等同于 DAY (date) DATEPART (mm, date) 等同于 MONTH (date) DATEPART (yy, date) 等同于 YEAR (date) 8、GETDATE() 以 DATETIME 的缺省格式返回系统
35、当前的日期和时间。 八、统计函数 AVG ( ) -返回的平均价值 count( ) -返回的行数 first( ) -返回第一个值 last( ) -返回最后一个值 max( ) -返回的最大价值 min( ) -返回最小的价值 total( ) -返回的总和 九、数学函数 abs(numeric_expr) 求绝对值 ceiling(numeric_expr) 取大于等于指定值的最小整数 exp(float_expr) 取指数 floor(numeric_expr) 小于等于指定值得最大整数 pi() 3.1415926. power(numeric_expr,power) 返回 powe
36、r 次方 rand(int_expr) 随机数产生器 round(numeric_expr,int_expr) 安 int_expr 规定的精度四舍五入 sign(int_expr) 根据正数,0,负数,返回+1,0,-1 sqrt(float_expr) 平方根 十、系统函数 suser_name() 用户登录名 user_name() 用户在数据库中的名字 user 用户在数据库中的名字 show_role() 对当前用户起作用的规则 db_name() 数据库名 object_name(obj_id) 数据库对象名 col_name(obj_id,col_id) 列名 col_lengt
37、h(objname,colname) 列长度 valid_name(char_expr) 是否是有效标识符 十一、以上函数的部分实例 1:replace 函数 第一个参数你的字符串,第二个参数你想替换的部分,第三个参数你要替换成什么 select replace(lihan,a,b) - lihbn (所影响的行数为 1 行) = 2:substring 函数 第一个参数你的字符串,第二个是开始替换位置,第三个结束替换位置 select substring(lihan,0,3); - li (所影响的行数为 1 行) = 3:charindex 函数 第一个参数你要查找的 char,第二个参数
38、你被查找的字符串 返回参数一在参数二的位置 select charindex(a,lihan) - 4 (所影响的行数为 1 行) = 4:ASCII 函数 返回字符表达式中最左侧的字符的 ASCII 代码值。 select ASCII(lihan) - 108 (所影响的行数为 1 行) = 5:nchar 函数 根据 Unicode 标准的定义,返回具有指定的整数代码的 Unicode 字符。 参数是介于 0 与 65535 之间的正整数。如果指定了超出此范围的值,将返回 NULL。 select nchar(3213) - unicode 字符 (所影响的行数为 1 行) = 6:sou
39、ndex 返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性。 SELECT SOUNDEX (lihan), SOUNDEX (lihon); - - L546 L542 (所影响的行数为 1 行) = 7:char 参数为介于 0 和 255 之间的整数。如果该整数表达式不在此范围内,将返回 NULL 值。 SELECT char(125) - (所影响的行数为 1 行) = 8:str 函数 第一个参数必须为数字,第二个参数表示转化成 char 型占的位置,小于参数一位置返回*,大于右对齐 SELECT str(12345,3) - * (所影响的行数为 1 行
40、) SELECT str(12345,12) - 12345 (所影响的行数为 1 行) = 9:difference 函数 返回一个整数值,指示两个字符表达式的 SOUNDEX 值之间的差异。 返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等:0 表示几乎不同或完全不同,4 表示几乎相同或完全相同。 SELECT difference(lihan,liha) - 3 (所影响的行数为 1 行) = 10:stuff 函数(四个参数) 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。 SEL
41、ECT stuff(lihan,2,3,lihan) - llihann (所影响的行数为 1 行) = 11:left 函数 返回最左边 N 个字符,由参数决定 select left(lihan,4) - liha (所影响的行数为 1 行) = 12 right 函数 返回最右边 N 个字符,由参数决定 select right(lihan,4) - ihan (所影响的行数为 1 行) = 13:replicate 函数 我的认为是把参数一复制参数二次 select replicate(lihan,4) - lihanlihanlihanlihan (所影响的行数为 1 行) = 14
42、:len 函数 返回参数长度 select len(lihan) - 5 (所影响的行数为 1 行) = 15:reverse 函数 反转字符串 select reverse(lihan) - nahil (所影响的行数为 1 行) = 16:lower 和 upper 函数 参数大小写转化 select lower(upper(lihan) - lihan (所影响的行数为 1 行) = 17:ltrim 和 rtrim 函数 删除左边空格和右面空格 select ltrim( lihan ) - lihan (所影响的行数为 1 行) select rtrim( lihan) - liha
43、n (所影响的行数为 1 行) 追加: 排名函数是 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
44、 函数的用法如下面的 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 条记录: