数据库学习笔记2

CREATE TABLE T_Person

(FIdNumber VARCHAR(20),

FName VARCHAR(20),

FBirthDay DATETIME,

FRegDay DATETIME,

FWeight NUMERIC(10,2))

T_Person为记录人员信息的数据表,其中字段FIdNumber 为人员的身份证号码,FName 为人员姓名,FBirthDay 为出生日期,FRegDay为注册日期,FWeight为体重。

数学函数

求绝对值ABS()函数用来返回一个数值的绝对值。

例:SELECT FWeight - 50,ABS(FWeight - 50) , ABS(-5.38) FROM T_Person

求指数POWER()函数是用来计算指数的函数。含有两个参数,第一个参数为待求幂的表达式,第二个参数为幂。

例:SELECT FWeight,POWER(FWeight,-0.5),POWER(FWeight,2),
POWER(FWeight,3),POWER(FWeight,4) FROM T_Person

求平方根SQRT()函数是用来计算平方根的函数。

例:SELECT FWeight,SQRT(FWeight) FROM T_Person

求随机数RAND()函数用来生成随机算法,RAND()函数还支持一个参数,这个参数为随机数种子

例:SELECT RAND(9527)

舍入到最大整数CEILING()函数用来舍掉一个数的小数点后的部分,并且向上舍入到邻近的最大的整数。

比如3.33将被舍入为4、2.89 将被舍入为3、-3.61将被舍入为-3。

例:SELECT FName,FWeight, CEILING(FWeight), CEILING(FWeight*-1) FROM T_Person

舍入到最小整数FLOOR()函数用来舍掉一个数的小数点后的部分,并且向下舍入到邻近的最小的整数。

比如3.33 将被舍入为3、2.89将被舍入为2、-3.61 将被舍入为-4。

例:SELECT FName,FWeight,FLOOR(FWeight),FLOOR(FWeight*-1) FROM T_Person

四舍五入ROUND()函数将数值向最近的整数值舍入。

ROUND()函数有两个参数和单一参数两种用法

两个参数的ROUND()函数用法为:ROUND(m,d),其中m为待进行四舍五入的数值,而d 则为计算精度,也就是进行四舍五入时保留的小数位数;当d为0 的时候则表示不保留小数位进行四舍五入;d还可以取负值,这时表示在整数部分进行四舍五入。

比如3.663 进行精度为2 的四舍五入得到3.66;3.663进行精度为0的四舍五入得到4;36.63进行精度为-1 的四舍五入得到40。

例:SELECT FName,FWeight, ROUND(FWeight,1), ROUND(FWeight*-1,0) , ROUND(FWeight,-1) FROM T_Person;

单一参数的ROUND()函数用法为:ROUND(m),其中m为待进行四舍五入的数值,它可以看做精度为0 的四舍五入运算。

比如3.663进行四舍五入得到4

例:SELECT FName,FWeight, ROUND(FWeight), ROUND(FWeight*-1) FROM T_Person

注意这种单一函数的用法在MSSQLServer 上以及DB2 上不被支持。

求正弦值SIN()函数,它接受一个参数,这个参数为待计算正弦值的表达式。

例:SELECT FName,FWeight,SIN(FWeight) FROM T_Person

求余弦值COS()函数,它接受一个参数,这个参数为待计算余弦值的表达式。

例:SELECT FName,FWeight, COS(FWeight) FROM T_Person

求反正弦值ASIN()函数,它接受一个参数,这个参数为待计算反正弦值的表达式。

例:SELECT FName,FWeight, ASIN(1/FWeight) FROM T_Person

求反余弦值ACOS()函数,它接受一个参数,这个参数为待计算反余弦值的表达式。

例:SELECT FName,FWeight, ACOS(1/FWeight) FROM T_Person

求正切值TAN()函数,它接受一个参数,这个参数为待计算正切值的表达式。
例:SELECT FName,FWeight, TAN(FWeight) FROM T_Person

求反正切值ATAN()函数,它接受一个参数,这个参数为待计算反正切值的表达式。

例:SELECT FName,FWeight, ATAN(FWeight) FROM T_Person

求2个变量的反正切ATN2()函数,使用格式为:ATN2(X,Y),函数返回2 个变量X 和Y 的反正切。

例:SELECT FName,FWeight, ATN2(FWeight,2) FROM T_Person

求余切COT()函数,它接受一个参数,这个参数为待计算余切值的表达式

例:SELECT FName,FWeight, COT(FWeight) FROM T_Person

求圆周率π值PI()函数,用来取得圆周率π值,这个函数不需要使用参数

例:SELECT FName,FWeight,FWeight *PI() FROM T_Person

弧度制转换为角度制DEGREES ()函数,它接受一个参数,这个参数为待转换的表达式

例:SELECT FName,FWeight, DEGREES(FWeight) FROM T_Person

角度制转换为弧度制RADIANS ()函数,它接受一个参数,这个参数为待转换的表达式

例:SELECT FName,FWeight, RADIANS(FWeight) FROM T_Person

求符号SIGN()函数,用来返回一个数值的符号,该函数接受一个参数,这个参数为待求绝对值的表达式。

如果数值大于0 则返回1,如果数值等于0 则返回0,如果数值小于0 则返回-1。

例:SELECT FName,FWeight-48.68,SIGN(FWeight-48.68) FROM T_Person

求整除余数:提供了操作符“%”用来计算两个数的整除余数

例:SELECT FName,FWeight,FWeight % 5 FROM T_Person

求自然对数LOG ()函数,用来计算一个数的自然对数值。该函数接受一个参数,此参数为待计算自然对数的表达式。

例:SELECT FName,FWeight, LOG(FWeight) FROM T_Person

求以10为底的对数LOG10()函数,用来计算一个数的以10 为底的对数值。该函数接受一个参数,此参数为待计算对数的表达式

例:SELECT FName,FWeight, LOG10(FWeight) FROM T_Person

求幂POWER(X,Y)函数,用来计算X 的Y 次幂。

例:SELECT FName,FWeight, POWER(1.18,FWeight) FROM T_Person

power(3,2) = 9

字符串函数

计算字符串长度LEN()函数,用来计算一个字符串的长度。该函数接受一个参数,此参数为待计算的字符串表达式。

例:SELECT FName, LEN(FName) FROM T_Person

字符串转换为小写LOWER()函数,用来将一个字符串转换为小写。该函数接受一个参数,此参数为待转换的字符串表达式。

例:SELECT FName, LOWER(FName) FROM T_Person

字符串转换为大写UPPER ()函数,用来将一个字符串转换为大写。该函数接受一个参数,此参数为待转换的字符串表达式。

例:SELECT FName, UPPER(FName) FROM T_Person

截去字符串左侧空格LTRIM()函数,用来将一个字符串左侧的空格去掉。该函数接受一个参数,此参数为待处理的字符串表达式。

例:SELECT FName,LTRIM(FName),LTRIM(' abc ') FROM T_Person

       SELECT '    123 abc     ', LEN('      123 abc        ') ,LEN( LTRIM('       123 abc       ') )

截去字符串右侧空格RTRIM ()函数,用来将一个字符串右侧的空格去掉。该函数接受一个参数,此参数为待处理的字符串表达式。

例:SELECT FName,RTRIM(FName),RTRIM('    abc      ') FROM T_Person

截去字符串两侧的空格:使用LTRIM ()函数和RTRIM ()函数复合来进行变通实现,也就是用LTRIM(RTRIM(string))来模拟实现

例:SELECT FName,LTRIM(RTRIM(FName)),LTRIM(RTRIM('      abc     ')) FROM T_Person

取子字符串:SUBSTRING()函数,其参数格式如下:
SUBSTRING(string,start_position,length)
其中参数string为主字符串,start_position为子字符串在主字符串中的起始位置,length为子字符串的最大长度。

例:SELECT SUBSTRING('abcdef111',2,3)

        SELECT FName, SUBSTRING(FName,2,3) FROM T_Person

计算子字符串的位置CHARINDEX()函数,检测制定的子字符串是否存在于主字符串中,如果存在则还可以返回所在的位置

CHARINDEX(string,substring)
其中参数string 为主字符串,参数substring 为待查询的子字符串。

如果string 中存在substring子字符串,则返回子字符串第一个字符在主字符串中出现的位置;

如果string中不存在substring子字符串,则返回0。

例:SELECT FName,CHARINDEX(FName,'m'), CHARINDEX(FName,'ly') FROM T_Person

从左侧开始取子字符串LEFT()函数,用于从左侧开始取任意长度的子字符串,

其参数格式如下:LEFT (string,length)
其中参数string为主字符串,length为子字符串的最大长度。

例:SELECT FName, LEFT(FName,3) , LEFT(FName,2) FROM T_Person

从右侧开始取子字符串RIGHT()函数,用于从左侧开始取任意长度的子字符串,

其参数格式如下:RIGHT (string,length)
其中参数string为主字符串,length为子字符串的最大长度。

例:SELECT FName, RIGHT(FName,3) , RIGHT(FName,2) FROM T_Person

字符串替换REPLACE()函数,可以用来将字符串的指定的子字符串替换为其它的字符串,

比如将“Hello World”中的“rl”替换为“ok”后得到“Hello Wookd”

REPLACE(string,string_tobe_replace,string_to_replace)
其中参数string 为要进行替换操作的主字符串,参数string_tobe_replace 为要被替换的
字符串,而string_to_replace将替换string_tobe_replace中所有出现的地方。

例:select FName,REPLACE(FName,'i','e'),FIDNumber, REPLACE(FIDNumber,'2345','abcd') FROM T_Person

可以达到删除子字符串的方法,那就是将第三个参数设定为空字符串,用空字符串来替换匹配的子字符串也就达到了删除指定子字符串的效果了。

例:SELECT FName, REPLACE(FName,'m','') ,FIDNumber,REPLACE(FIDNumber,'123','') FROM T_Person

也可以删除字符串中间的空格,用空字符串替换中所有的空格。

例:SELECT REPLACE(' abc  1 23  wpf',' ','') , REPLACE(' ccw enet wcf f',' ','')

得到字符的ASCII码ASCII()函数,用来得到一个字符的ASCII 码,它有且只有一个参数,这个参数为待求ASCII码的字符,如果参数为一个字符串则函数返回第一个字符的ASCII码
例:SELECT ASCII('a') , ASCII('abc')

       SELECT FName, LEFT(FName,1) , ASCII( LEFT(FName,1) ) ,ASCII(FName) FROM T_Person

       计算每个员工姓名的第一个字符的ASCII码

得到一个ASCII码数字对应的字符CHAR()函数

例:SELECT CHAR(56) , CHAR(90) ,'a', CHAR( ASCII('a') )

       SELECT FWeight, CEILING(FWeight) , CHAR( CEILING(FWeight) ) FROM T_Person

      将FWeight转换为整数,然后得到它对应的字符

发音匹配度SOUNDEX()函数,用于计算一个字符串的发音特征值,这个特征值为一个四个字符的字符串,特征值的第一个字符总是初始字符串中的第一个字符,而其后则是一个三位数字的数值。

例:SELECT SOUNDEX('jack') , SOUNDEX('jeck') , SOUNDEX('joke') ,SOUNDEX('juke') , SOUNDEX('look') , SOUNDEX('jobe')

        SELECT FName, SOUNDEX(FName) FROM T_Person

过在MSSQLServer 和DB2 中提供了DIFFERENCE()函数用来简化两个字符串的发音相似度比较,它可以计算两个字符串的发音特征值,并且比较它们,然后返回一个0至4 之间的一个值来反映两个字符串的发音相似度,这个值越大则表示两个字符串发音思想度越大。

例:SELECT DIFFERENCE(FName,'Merry') FROM T_Person

在WHERE语句中使用DIFFERENCE()更有意义。

SELECT * FROM T_Person WHERE DIFFERENCE(FName,'Tim')>=3

日期时间函数

数据库中的日期时间数据类型分为日期、时间、日期时间以及时间戳四种类型。

日期类型是用来表示“年-月-日”信息的数据类型,其精度精确到“日”,一般用Date来表示

时间类型是用来表示“小时:分:秒” 信息的数据类型,其精度精确到“秒”,一般用Time来表示

日期时间类型是用来表示“年-月-日小时:分:秒” 信息的数据类型,其精度精确到“秒”,一般用DateTime来表示

时间戳:对于日期时间类型精度要求更加高的日期时间信息,一般用TimeStamp来表示。

注:MSSQLServer 中不支持Time 类型。

用字符串来表示日期时间类型,数据库系统会自动在内部将它们转换为日期时间类型,比如“'2008-08-08'”--“2008-08-08 08:00:00”、“08:00:00” --“2008-08-08 08:00:00.000000”等。

取得当前日期时间GETDATE()函数  ,包括了日期、时间(精确到秒以后部分)的时间戳信息
例:SELECT GETDATE() as 当前日期时间

没有专门提供取得当前日期、取得当前时间的函数,不过我们可以将GETDATE()的返回值进行处理,需要借助于Convert()函数

使用 CONVERT(VARCHAR(50) ,日期时间值, 101)可以得到日期时间值的日期部分

例:SELECT CONVERT(VARCHAR(50) ,GETDATE( ), 101) as 当前日期

使用CONVERT(VARCHAR(50) ,日期时间值, 108)可以得到日期时间值的时间部分

例:SELECT CONVERT(VARCHAR(50) ,GETDATE(), 108) as 当前时间

日期增减DATEADD()函数,用于进行日期时间的加法运算

函数的参数格式:DATEADD (datepart , number, date )

其中参数date为待计算的日期;参数date制定了用于与datepart 相加的值,如果指定了非整数值,则将舍弃该值的小数部分;参数datepart指定要返回新值的日期的组成部分

比 如DATEADD(DAY, 3,date) 为计算日期date 的3 天后的日期, 而DATEADD(MONTH ,-8,date)为计算日期date的8 个月之前的日期。1

例:SELECT FBirthDay, DATEADD (YEAR ,3,FBirthDay) as threeyrs,
DATEADD(QUARTER ,20,FBirthDay) as ttqutrs,
DATEADD(MONTH ,68,FBirthDay) as sxtmonths,
DATEADD(WEEK, -1000,FBirthDay) as thweeik
FROM T_Person

计算日期差额DATEDIFF()函数,用于计算两个日期之间的差额。

函数的参数格式:DATEDIFF ( datepart , startdate , enddate )参数startdate为起始日期;参数enddate为结束日期。

例:SELECT FRegDay,FBirthDay,DATEDIFF(WEEK, FBirthDay, FRegDay) FROM T_Person

计算一个日期是星期几DATENAME()函数,这个函数可以返回一个日期的特定部分,并且尽量用名称来表述这个特定部分

其参数格式如下:DATENAME(datepart,date)
其中参数date为待计算日期,date 参数也可以是日期格式的字符串;参数datepart指定要返回的日期部分的参数

如果使用Weekday(或者使用别名dw)做为datepart参数调用DATENAME()函数就可以得到一个日期是星期几

例:SELECT FBirthDay,DATENAME(Weekday,FBirthDay),FRegDay,DATENAME(DW, FRegDay) FROM T_Person

取得日期的指定部分DATENAME()函数,使用它就可以提取日期的任意部分

SELECT FBirthDay,DATENAME(year,FBirthDay) AS y,DATENAME(dayofyear,FBirthDay) AS d,DATENAME(week,FBirthDay) AS u FROM T_Person

DATEPART()函数:这个函数也可以用来返回一个日期的特定部分,

其参数格式如下:DATEPART (datepart,date)
其中参数date为待计算日期,date 参数也可以是日期格式的字符串;参数datepart指定要返回的日期部分的参数

使用Dayofyear做为datepart参数调用DATEPART ()函数就可以得到一个日期是当年的第几天;

使用Year做为datepart参数调用DATEPART ()函数就可以得到一个日期的年份数;
以此类推……

DATEPART()函数和DATENAME()函数完全一样,不过其实它们并不是只是名称不同的别名函数,虽然都是用来提取日期的特定部分的,不过DATEPART()函数的返回值是数字,而DATENAME()函数则会将尽可能的以名称的方式做为返回值。

其他函数

类型转换

CAST()CONVERT()两个函数用于进行类型转换,CAST()是符合ANSI SQL99的函数,CONVERT() 是符合ODBC标准的函数。

的参数格式如下:
CAST ( expression AS data_type)
CONVERT ( data_type, expression)

参数expression为待进行类型转换的表达式,而type为转换的目标类型几乎可以是数据库系统支持的任何类型。

例:

SELECT
CAST('-30' AS INTEGER) as i,
CONVERT(DECIMAL,'3.1415726') as d,
CONVERT(DATETIME,'2008-08-08 08:09:10') as dt

将每个人的身份证后三位转换为整数类型并且进行相关的计算:

SELECT FIdNumber,
RIGHT(FIdNumber,3) as 后三位,
CAST(RIGHT(FIdNumber,3) AS INTEGER) as 后三位的整数形式,
CAST(RIGHT(FIdNumber,3) AS INTEGER)+1 as 后三位加1,
CONVERT(INTEGER,RIGHT(FIdNumber,3))/2 as 后三位除以2
FROM T_Person

空值处理:COALESCE()函数

参数格式如下:
COALESCE ( expression,value1,value2……,valuen)
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。

COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。如果expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返回value1;否则判断value2是否是空值,如果value2不为空值则返回value3;……以此类推,
如果所有的表达式都为空值,则返回NULL。

例:SELECT FName,FBirthDay,FRegDay,COALESCE(FBirthDay,FRegDay,'2008-08-08') AS ImportDay FROM T_Person

COALESCE()函数的简化版:ISNULL(expression,value)

上例:SELECT FBirthDay,FRegDay,ISNULL(FBirthDay,FRegDay) AS ImportDay FROM T_Person

NULLIF()函数NULLIF ( expression1 , expression2 )
如果两个表达式不等价,则NULLIF 返回第一个expression1的值。如果两个表达式等价,则NULLIF 返回第一个expression1类型的空值。也就是返回类型与第一个expression相同。

例:SELECT FBirthDay,FRegDay,NULLIF(FBirthDay,FRegDay) FROM T_Person

CASE函数:流程控制函数

语法如下:
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

CASE函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1,如果expression等于value2则返回returnvalue2,expression等于value3则返回returnvalue3,……
以此类推,如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。

CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

其中的condition1 、condition 2、condition 3……为条件表达式,CASE函数对各个表达式从前向后进行测试,

如果条件condition1为真则返回returnvalue1,否则如果条件condition2为真则返回returnvalue2,否则如果条件condition3为真则返回returnvalue3,……以此类推,
如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。

例:

SELECT FName,FWeight,
(CASE
WHEN FWeight<40 THEN 'thin'
WHEN FWeight>50 THEN 'fat'
ELSE 'ok'
END) as isnormal
FROM T_Person

PATINDEX()函数PATINDEX ( '%pattern%' , expression )

它返回指定表达式中模式'%pattern%'第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

例:SELECT FName,PATINDEX('%_m%',FName) FROM T_Person

查找每个人的姓名中第一个长度为2并且第二个字符为m的子字符串的位置

REPLICATE ()函数,用来得到一个子字符串重复了若干次所组成的字符串

REPLICATE (str,count)        参数str为子字符串,而count为重复次数。

字符串颠倒REVERSE()函数,用来将一个字符串的顺序颠倒,下面的SQL语句将所有人员的姓名进行了颠倒:
例:SELECT FName, REVERSE(FName) FROM T_Person

ISDATE()函数,用来确定输入表达式是否为有效日期

如果输入表达式是有效日期,那么ISDATE 返回 1;否则,返回 0。

其参数格式如下:ISDATE ( expression )
expression参数为要验证其是否为日期的表达式。expression可以是text、ntext 表达式和image 表达式以外的任意表达式,可以隐式转换为nvarchar。

ISNUMERIC ()函数,用来确定表达式是否为有效的数值类型

如果输入表达式的计算值为有效的整数、浮点数、money 或decimal 类型时,ISNUMERIC 返回 1;否则返回 0。
其参数格式如下:ISNUMERIC ( expression )       expression参数为要计算的表达式

APP_NAME()函数返回当前会话的应用程序名称;

CURRENT_USER函数(注意这个函数不能带括号调用)返回当前登陆用户名;

HOST_NAME()函数返回工作站名

生成全局唯一字符串的函数NEWID(),
下面生成三个UUID 字符串:
SELECT NEWID() AS id1, NEWID() AS id2

原文地址:https://www.cnblogs.com/HuXiaoxia/p/3462162.html