数学函数
数学函数通常返回对数值数据进行数学运算的操作结果。数学函数的形式:
function_name (arguments)
Integer_expr可以是任何一种整数数据类型:int、smallint或tinyint;
Float_expr可以是任何一种整数或浮点类型;
Numeric_expr可以是任何的整数、浮点或money类型。
函数名
参数
返回结果
Abs
(numeric)
表达式的绝对值。返回结果与数字表达式类型相同且精度和标度相同
Acos
(approx_numeric)
返回反余弦函数值(弧度)
Asin
(approx_numeric)
返回反正弦函数值(弧度)
Atan
(approx_numeric)
返回反正切函数值(弧度)
Atn2
(approx_numeric1, approx_numeric2)
返回approx_numeric/approx_numeric2的反正切函数值(弧度)
Ceiling
(numeric_expr)
大于等于指定值的最小整数。返回结果与数字表达式类型相同。对于numeric和decimal类型表达式,返回结果的精度同表达式相同而标度不同
Cos
(approx_numeric)
返回指定角度(弧度)的余弦函数值
Cot
(approx_numeric)
返回指定角度(弧度)的余切函数值
Degress
(numeric_expr)
把弧度值转成角度值。返回结果与数字表达式类型相同。对于numeric和decimal类型的表达式,返回结果的精度为77而标度与表达式的标度相同。当使用money数据类型时,内部转换为float并丢掉精度。
Exp
(float_expr)
指定值的指数值
Floor
(numeric_expr)
小于等于指定值的最大整数。返回结果与数字表达式类型相同。当表达式的数据类型为numeric或decimal时,结果的精度与表达式相同而标度为0
Log
(float_expr)
指定值的自然对数值
Log10
(float_expr)
指定值的以10为底的对数值
Pi
()
返回值为3.1415926的常量
Power
(numeric,power)
返回numerci和power次幂。返回结果与数字表达式类型相同。对于numeric和decimal类型的表达式,返回结果的精度为77而标度与表达式的标度相同。当使用money数据类型时,内部转换为float并丢掉精度。
Radians
(numeric_expr)
把角度值转成弧度值。返回结果与数值表达式类型相同。对于numeric和decimal类型的表达式,返回结果的精度为77而标度与表达式的标度相同.当使用money数据类型时,内部转换为float并丢掉精度 。
Rand
([integer])
返回0或1之间的随机浮点数。可选项integer_expr是种子。
Round
(numeric,integer)
把数值表达式四舍五入到指定的integer位。如果integer是正数,则确定小数点的右边有效位数,如果integer是负数,则确定小数点左边的有效位。返回数据与表达式的数据类型相同。对于numeric和decimal数据类型的表达式,返回结果的精度为第一个参数的精度加1,而标度同表达式的标度相同
Sign
(numeric)
返回值的符号:正数(+1),零(0),或负数(-1)。返回结果与数字表达式类型相同,并且精度和标度也相同。
Sin
(numeric)
返回指定角度(弧度)的正弦函数值
Tan
(numeric)
返回指定角度(弧度)的正切函数值
Sqrt
(float_expr)
返回指定值的平方根。返回值必须为正数或 0
数学内部函数用于对数值数据进行计算。一些函数要求整型数据和近似数值类型数据。很多的函数用于操作精确数值类型,近似数值类型,money和float数据类型。内部函数用于精确数值类型,近似数值类型,money和float数据类型。内部函数对float类型操作的缺省精确度是6位小数。出错陷阱用来处理数学函数的值域或返回错误。用户可使用set命令来设置arithabort或arithignore选项。在缺省情况下,arithabort的两个悬项arithabort_overflow和arithboart numeric_trunaction都设置为on.
当选项arithabort arith_overflow设置为on时,如果出现被0除的情况,或是在进行显式或隐式的数据类型转换时损失了精度,则整个事务或批命令被回退。如果选项arithabort arith_overflow设置为off,Adaptive Server 就会放弃产生错误的命令,但继续处理事务或命令。
选项arithabort arith_truncation处理隐式的数据类型转换时出现的损失标度的情况。当该选项被设置为on时,将放弃产生错误的命令并继续处理事物或批命令中的后续命令。如果该选项被设置为off,则adaptive server会自动截短查询结果并继续处理。
在缺省情况下,arithignore arith_overflow被设置为off。此时,在出现被0除错误或失去精读时,adaptive server显示信息。而此选项被设置为on时,则在出现错误之后忽略警告信息。
例子
select floor(123.45) 123
select floor(-123.45) -124
select floor($123.45) 123.00
select ceiling(123.45) 124
select ceiling(-123.45) -123
select ceiling($123.45) 124.00
select round(123.4545,2) 123.4500
select round(123.45,-2) 100.00
round函数总返回一个值,即使其长度是非法的。如果指定长度是正值并且长于小数点后的位数,则零加在小数位后。如果长度是负数并且大于或等于小数点前的位数,round将返回0.00
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yjq8116/archive/2004/09/03/93759.aspx
日期函数
日期内部函数用来显示有关日期和时间的信息。它们处理datetime和smalldatetime的值,并对其进行算术运算。日期函数可用在选择列表中、where子句里或任何能够使用表达式的地方。
Datetime类型的值在内部被adaptive server存贮成两个4字节的整数。第一个4字节存放基准日期(January 1, 1900)前或后的天数。基准日期是系统的参考日期。早于January 1, 1753的日期值是禁用的。另外一个4字节数存放精确到1/300秒的时间。
Smalldatetime存储的日期和时间不如datetime中的精确。Smalldatetime被存成两个2字节的整数。前2个字节存放基准日期后的天数,另外2个字节存放一天从零点开始的分钟数。日期范围是从january 1, 1900到june 6,2079年,时间精确到分钟。
函数名
参数
返回结果
Getdate
()
当前的系统日期和时间
Datename
(datepart, date)
以ASCII串形式给出datetime或smalldatetime指定的日期元素。
Datepart
(datepart,date)
以整数形式给出datetime或smalldatetime指定的日期元素。
Datediff
(datepart,date)
第2个和第1个日期元素间的差值(例如月、日、小时)
Dateadd
(datepart,number,date)
把一个日期部分加到另一个日期后产生的日期值
Datetime、datepart、datediff和dateadd都要求日期元素的年、月、小时等做为其参数。下表给出了每个日期元素、它们的缩写以及相应取值范围。Datetime函数产生相应的ASCII值,如一周里的星期几。
日期元素
缩写
值
Year
Yy
1753-9999
Quarter
Qq
1-4
Month
MM
1-12
Dayofyear
Dy
1-366
Day
Dd
1-31
Week
Wk
0-51
Weekday
Dw
1-7(星期日-星期六)
Hour
Hh
0-23
Minute
Mi
0-59
Second
Ss
0-59
Milliseond
Ms
0-999
注意:weekday周天元素的值是受设置的语言影响的。
例子:
查询给定日期的月分:
select datename(mm,”1997/11/28”)
结果:november
查询给定的两个日期相差的月数:
select datediff(mm,”1997/09/09”,”1997/11/11”)
结果:
2
为给定日期再加5个月
select dateadd(mm,05,”1997/06/16”)
结果:
Nov 16 1997 12:00:00:000AM
——
Datepart函数接受下面的日期元素做为星期数:
Calweekofyear 返回星期号
Calyearofweek 返回年数
Caldayofyear 返回星期中的天数
日期元素
缩写
结果
Calweekofyear
Cwk
1-52
Calyearofyear
Cyr
1753-9999
Caldayofweek
Cdw
1-7(在美国1是星期一)
例如:
查询给定日期是该年中的第几个星期:
select datepart(cwk,”1997/01/31”)
结果:48
查询给定日期中年的部分:
select datepart(cyr,”1997/01/15”)
结果:1997
查询给定日期为星期几:
select datepart(cdw,”1997/11/28”)
结果:5
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yjq8116/archive/2004/09/03/93761.aspx
文本函数
文本内部函数用与对text和image数据进行操作。下面列出了text函数的名称、变量和结果:
函数名
参数
返回结果
Patindex
(“%pattern%”,char_expr
[using{bytes|chars|characters}])
返回一个整型数,代表pattern第一次出现在指定字符表达式中的位置。如果没有找到pattern则返回0。缺省情况下,返回以字符计算的偏移量;对多字节字符串,为了返回以字节为单位的偏移量则必须指定using bytes。通配符%必须放在pattern的前面和后面,当查找起始字符和结尾字符则除外。
textptr
(text_columname)
返回一个text指针的16字节的二进制值。检测text指针值以确保指针指向第一个文本页
Textvalid
(“table_name,col_name”
,textpointer)
检测给定的指针是否有效。
注意,text或image列的标识符必须包括表名。如果指针有效,则返回1,否则返回0
Set textsize
{n|0}
Set textsize 命令指定使用select 语句返回的text和image数据的最大字节数,当前设置存储在全局变量@@textsize中。n是一个正整数,指定返回数据的最大字节数;0为恢复缺省设置(32K字节)
另外,datalenth(系统函数)也可用在text列上。
T-SQL支持convert命令显式地把text转换到varchar或char,也可以将image转换成varbinary或binary,但text或image的数据被截成255个字节。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yjq8116/archive/2004/09/03/93757.aspx
查询中使用的函数
? 在查询语句中,不仅可查询表中列的值而且可以使用内部函数查询数据库中不同类型的信息。可以在SELECT列表,WHERE子句和任何允许表达式的地方使用内部函数。这些函数都是T-SQL对SQL的扩展。Adaptive Server提供的内部函数可以分成以下几类:
l???????? 系统函数。返回数据库中的信息;
l???????? 字符串函数。用于处理字符串或字符串表达式;
l???????? text函数。用于处理text和image类型的数据;
l???????? 数学类型。用于处理三角、几何以及其它数据处理的函数;
l???????? 日期函数。处理datetime和smalldatetime类型的数据;
l???????? 数据类型转换函数(convert)。用于将一种数据类型转换成另一种数据类型,也可将日期格式化成各种形式。
l???????? 安全函数。返回安全服务和用户自定义角色的信息
一、系统函数
系统函数从数据库返回特定的信息,它们中的大多数提供了查询系统表的简便方式。
系统函数的一般语法:
select function_name ( argument[s] )
系统函数可以用在选择项里、where子句里以及任何允许表达式存在的地方。例如:如果要查询“zyf”的用户标示号,则输入:
select? “用户标示号” =user_id ( “zyf” )
?
?
结果:
用户标示号
——
3
一般来说,函数名表示里将返回什么样的信息。
User_name用ID号作参数而返回用户的名字。如下,如果查询ID号为3的用户名
Select “用户名” = user_name(3)
结果:
用户名
——
zyf
找出当前用户的名字(也就是正在使用的用户名)
select user_name()
结果:
用户名
——
dbo
Adaptive Server按照如下的规则处理用户标示符:
l???????? 当系统管理员成为他使用的数据库的所有者时,其登陆用户ID被指定为1;
l???????? guest用户的登陆用户ID总是-1
l???????? 数据库所有者的用户总是dbo,他的用户ID是1;
l???????? guest用户的ID是2
?
系统函数表
函数名
参数
返回结果
Col_name
(object_id,column_id[,database_id])
列名
Col_length
(object_name,column_name)
列的定义长度(使用datalength是查看实际数据的长度)
curunreservedpgs
(dbid,lstart,unreservedpgs)
磁盘片中的空闲页数。如果数据库是打开的,则该值来自于内存;如果数据库没有打开则该值来自于系统表sysusages中列unreservedpgs
Data_pgs
(object_id,{doampg | ioampg})
被表(doampg)或索引(ioampg)使用的页数。该结果不包括内部结果使用的页数
Datalength
(expression)
返回expression的长度。Expression可以是列名也可以是字符串常量。如果是列名则返回列中实际数据的长度。
Db_id
([database_name])
数据库的ID号。数据库名必须为字符表达式,如果数据库名为字符常量,则必须用引号将其引起来。如果没有给出数据库名,则返回当前数据库的ID号
Db_name
([database_id])
数据库名。Database_id必须是数值表达式如果没有给出database_id,则返回当前数据库名。
Host_id
()
客户进程(非Adaptive Server进程)的当前主机名
Host_name
()
索引列名。如果object_name 不是表名或视图名,则返回NULL
Index_col
(object_name,index_id,key_#[,user_id])
当expression1为NULL时,用expression2的值来代替expression1的值。表达式的值必须可隐式地转化,否则必须使用convert函数
Isnull
(expression1,expression2)
管理日志段的最后机?值。Lastchance:在指定的数据库中创建一个最后机会值;当指定数据库的最后机会值被超过时返回1,否则返回0;unsuspend:用以唤醒数据库中挂起的任务并且当最后机会值被超过时使用该机会值无效;reserve:返回要成功地转储指定大小的一个事务日志时所需的自由日志页的数目。
Lct_admin
({{“lastchance”|”logfull”|”unsuspend”}
,database_id}|
“reserve”
,log_pages})
分配给表或索引的页数
Reserved_pgs
(object_id,{doampg|ioampg})
表中行数的估计值
Rowent
(doampg)
数据库对象ID号
Object_id
(“objname”)
数据库对象名
Object_name
(obj_id)
从表syslogins中返回服务器用的ID号,如果没有给出参数server_user_name的值则返回当前用户的服务器ID号
Suser_id
([server_user_name])
返回服务器用户名,服务器用户的ID号存储在表syslogins中,如果没有给出参数server_user_id的值,则返回当前用户名。
Tsequal
(timestamp,timestamp2)
在浏览模式下,比较timestamp的值以阻止提交那些被修改过的值。Timestamp是被浏览行的时间标志;timestamp2是存储行的时间标志。该函数允许用户不调用db_library而使用浏览模式。
Used_pgs
(object_id,doampg,ioampg)
由表和聚簇索引使用的列数
User
?
用户名
User_id
([user_name])
用户的ID号。报告当前数据库中的用户ID号,如果没有给出参数user_name,返回当前用户的ID号。
User_name
([user_id])
返回与当前数据库的用户ID号相对应的用户名。如果没有提供参数user_id的值,则返回当前用户名。
Valid_name
(character_expression)
如果character_expression是无效的标识符(非法字符或长度超过了30),则返回0;否则返回非0数值
Valid_user
(server_user_id)
如果指定的ID号在Adaptive Server的至少一个数据库中有其对应的用户名或别名,则返回1;只有sa_role或sso_role角色的用户才可以使用该函数。
?
例子:
1、找出表titles中title列的长度
slelect “标题长度”=col_length(“article”,”title”)
? 结果:
? 标题长度
? -----
? 120
2、找出表article中title列中数据的长度
? select length=datalength(title),title
? from article
? 结果:
length??? title
24??? ??????软透露其internet 策略
20????????????????? A推出两种网络新软件
21??????????????????? IBM发布新版SYSTEMVIEW
3、查找所有作家的工资,如果工资为NULL值则替换成$10.00
?? select isnull(salary,$10.00)
?? from auths
结果:
——
120.00
100.00
110.00
10.00
4、查出系统表sysusers中的用户ID为1的用户名
select name form sysusers
where name=user_name(1)
结果:
name
——
dbo
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yjq8116/archive/2004/09/03/93754.aspx
字符串函数 收藏
二、字符串函数
一般形式为:
select function_name(arguments)
拼接二进制或字符表达式:
select (expression+expression+………)
当拼接非字符、非二进制表达式时,必须使用convert函数将其转换为字符类型或二进制类型的数据;
如:select name+”的工资为:”+convert(varchar(12),salary) from auths where sex=0
?
? 大多数字符串函数仅能用于char和varchar以及那些可隐式地转换成char和varchar的数据类型。
拼接可用于binary和varbinary列上,也可用在char和varchar列上。
字符串可以嵌套,并可用在任何允许表达式存在的地方。当常量同字符串函数一起使用时,要将常量用单引号或双引号括起来。
?
字符串函数
char_expr是char、varchar、binary或varbinary类型的字符数据表达式
integer_expr是一个正整数
pattern是用于模式匹配的char_expr
float_expr是浮点类型值
?
函数名
参数
返回结果
Ascii
(char_expr)
返回表达式中第一个字符的ASCII编码
Char
(integer_expr)
将单字节的integer值转换为character值。Char通常作为ascii的反函数使用。Integer_expr必须是0到255之间的数。
返回的是char数据类型。如果结果值是多字节字符的第一字节,则字符将是未定的。
Charindex
(expression1,expression2)
查找expression1在expression2中的起始位置并返回表示起始位置的integer整数值。如果没有找到expression1则返回0。如果expression1包含通配符,将其按文字处理。
Char_length
(char_expr)
返回字符串表达式或text值的长度。对于表中列的可变长数据,在计算字符表达式长度时去掉尾空格。对于多字节字符集,字符长度小于字节数,使用系统函数来确定字节数。
Difference
(char_expr1,char_expr2)
返回表示两个soundex值不同的整数值。
Lower
(char_expr)
将大写字母转换成小写字母,返回character类型值
Itrim
(char_expr)
删除字符串表达式中的前导空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。
Patindex
(“%pattern%”,
char_expr[using{bytes|
chars|characters}])
返回在指定字符串中第一次出现pattern的起始位置的integer型数据,如果没有找到pattern则返回0。缺省情况下返回字符的偏移量(多个字节的字符串)必须指定using bytes。通配符”%”必须放在pattern的前面或后面。除非要找的位置为起始字符或结尾字符。该函数可被用于text数据
Replicate
(char_expr,integer_expr)
返回一个与char_expr的类型相同的字符串。该字符串是char_expr次的结果(当结果多于255个字节时,则只取前255个字节)。
Reverse
(expression)
逆转字符串或二进制数据的值。如果表达式是“abcd”则返回“dcba”;如果表达式是”0x12345000”,则返回”0x00054321
Right
(expression,integer_expr)
返回从右边开始指定个数的字符串或二进制expression的一部分。返回值同expression具有相同的数据类型
Rtrim
(char_expr)
删除尾空格。只有与SQL中指定的字符集中的空格值等价的字符才被删除。
Soundex
(char_expr)
返回由相邻的单字节或双字节正体字母组成的字符串的一个4字符的soundex代码
Space
(integer_expr)
返回integer_expr个单字节空格组成的字符串
Str
(approx_numeric[,length[,decimal]])
返回代表浮点数的字符串。Length指定返回的字符串数目(包括小数点、小数点左边和右边所有的数字和空格);decimal指定结果返回的小数位数;length和decimal是可选项,如果选定,则必须为非负数。缺省的length为10,省的decimal为0.为了与指定的length相符,该函数四舍五入小数部分
Stuff
(char_expr1,start,length,char_expr2)
从char_expr1中删除start开始的length个字符,然后将char_expr2插入到char_expr2的start处。如果只删除字符而不插入字符,则必须将char_expr2指定为null,而不是“”,“”表示一个空格
Substring
(expression,start,length)
返回字符串或二进制钟的一部分。Start指定子串的开始位置。Length指定子串的长度。
Upper
(char_expr)
将小写字符串转换为大写字符串 二进制串 列名或它们之间的组合。把字符串放到单引号或双引号中
+
expression
拼接两个或更多的字符串、二进制串、列名或它们之间的组合。把字符串放到单引号或双引号中。
?
下面是使用字符串函数的例子。
例一:substring函数
显示58年11月11日以后出生的所有作家居住的城市:
select name,substring(address,1,4)
from auths
where birthdate>”19588/11/11”
结果:
name
王达林??? 北京
许灵验??? 呼和
张启迪??? 北京
郝丹盈??? 上海
王军????? 上海
例二:charindex和patindex函数的使用
这两个函数都返回一个指定字符表达式或二进制表达式的起始位置。它们都要求两个参数,但它们有一点小小的差别。
Charindex仅可用在char和varchar列上,而patindex还可用在text列上;patindex可使用通配符,而charindex则不能。
它们都有两个参数:
第一个参数是指定其位置的字符表达式或二进制表达式。
对于patindex,必须将字符表达式或二进制表达式括在“%”中,除非寻找的表达式为起始字符串(可省略前面的“%”)或最后的字符串(可省略尾部“%”)。
对于charindex,表达式中不能包括通配符。
第二个参数是一个字符串表达式,通常是一列名。Adaptive Server将在其中找出指定的字符表达式或二进制表达式。
用上述两个函数找出表auths中title列字符串“微软”的开始位置的查询语句是:
select charindex(“微软”,title),patindex(“%微软%”,article_text)
from article
where author_code=”A00001”
结果:
——
1????????????????????? 1
0????????????????????? 1
patindex找出表sysobjects中以sys开始,并且第4个字符是a,b,c或d的所有行。
Select name
From sysobjects
Where patindex(“sys[a-d]%”,name)>0
结果:
——
sysalternates
sysattributes
syscolumns
syscomments
sysdepends
例三:使用str函数
str函数用于将float类型的数字转换成字符串。此函数带有指定整数长度(小数点以前的数字部分)和小数点后面位数的可选项。对str来讲,长度和小数参数不应该是负数。
长度的缺省是10,指定的长度应至少等于或大于数的小数点前的部分加上数的符号(如果有的话),即:
??? length>=整数部分+正负号
如果float_expr超过指定长度,则结果中返回指定长度的字符串“**”。
?
Select str(123.45,2,2)? 结果:**
Select str(123.45,6,2)? 结果:123.45
例四:使用stuff函数
stuff函数将一字符串插入到另一字符串。它首先删掉在expr1中从起始位置开始的指定长度的字符,然后再从起始位置插入expr2字符串。如果起始位置或长度是负值,则返回一个空值字符串。如果起始位置长于expr1,也返回一个空值字符串。如果删除长度比expr1长,则删除到expr1中的最后一个符。
Select stuff(“abc”,2,3,”rgf”)???? 结果:argf
?
一些函数的使用
1、? 拼接
语法:select (expression+expression……)
select (“abc”+”def”)?????????? 结果:abcdef
?
select “作家代码列表”=”(“+name+”)”+”作家的代码是:”+author_code
from auths
where author_code<’A0007’
结果:
作家代码列表
——
(王达林)作家的代码是:A0001
?
要拼接数字或日期类型的数据,必须使用转换函数convert
select name+”的出生日期是:”+convert(varchar(30),birthdate)
from auths where sex=0
结果:
——
王达林的出生日期是:Nov 12 1958 12:00AM
2、? 拼接(concatenation)和空字符串
空字符串(一对双引号或一对单引号),被当作一个空格处理。
Select “abc”+””+”def”
结果:
——
abc def
3、? 字符串函数的嵌套
显示出女作家的姓名及其出生年
select name+”生于”+substring(convert(varchar(30),birthdate),8,4)+”年
from auths where sex=0
结果:
——
王达林生于1958年
?
显示女作家的工资额
select name+”的工资为:”+str(salary,5,1)
from auths where sex=0
结果: 王达林的工资为:120.0
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yjq8116/archive/2004/09/03/93755.aspx