(3)LEFT函数
LEFT ( character_expression , integer_expression )
功能:返回从字符串character_expression左边开始,由integer_expression指定个数的字符。参数character_expression:为字符型表达式,integer_expression:为整型表达式,返回值为varchar型。
【例】 返回书名最左边的 10 个字符。
SELECT LEFT(书名, 10) FROM bookORDER BY ISBNGO
(4)LTRIM函数
LTRIM ( character_expression )
功能:删除character_expression字符串中的前导空格,并返回字符串。参数character_expression为字符型表达式,返回值类型为varchar。
【例】 使用 LTRIM 字符删除字符变量中的起始空格。
DECLARE @string varchar(40)SET @string = ' 中国,一个古老而伟大的国家'SELECT LTRIM(@string)
(5)REPLACE函数
REPLACE (string_expression1,string_expression2,string_expression3)
功能:用第三个字符串表达式替换第一个字符串表达式中包含的第二个字符串表达式,并返回替换后的表达式。
【例】 用 REPLACE实现字符串的替换。
DECLARE @str1 char(20),@str2 char(4),@str3 char(20)SET @str1='数据库原理'SET @str2='原理'SET @str3='概论'SET @str3=REPLACE (@str1, @str2, @str3)SELECT @str3
(6)SUBSTRING函数
语法格式:
SUBSTRING ( expression , start , length )
功能:返回expression中指定的部分数据。参数expression可为字符串、二进制串、text、image字段或表达式;Start、Length均为整型,前者指定子串的开始位置,后者指定子串的长度(要返回的字节数)。如果 expression 是字符类型和二进制类型,则返回值类型与expression的类型相同,在其它情况下,参考下表。
【例】 如下程序在一列中返回xs表中的姓氏,在另一列中返回表中学生的名。
SELECT SUBSTRING(姓名, 1,1), SUBSTRING(姓名, 2, LEN(姓名)-1)FROM xsORDER BY 姓名
(7)STR函数
语法格式:
STR ( float_expression [ , length [ , decimal ] ] )
功能:将数字数据转换为字符数据。参数float_expression为float类型的表达式,Length用于指定总长度,包括小数点,Decimal指定小数点右边的位数,Length、Decimal必须均为正整型。返回值类型为char。
【例】 如下程序用于查询ISBN号978-7-111-21382-6书籍的书名和库存量。
DECLARE @str char(80)SET @str=(SELECT 书名 FROM book WHERE ISBN='978-7-111-21382-6 ') + '库存量' + STR((SELECT 库存量 FROM book WHERE ISBN='978-7-111-21382-6 '))SELECT @str
系统函数用于对SQL Server中的值、对象和设置进行操作并返回有关信息。
(1)CASE函数
CASE有两种使用形式:一种是简单的CASE函数,另一种是搜索型的CASE函数。
① 简单的 CASE 函数。语法格式:
CASE input_expression WHEN when_expression THEN result_expression […n ][ ELSE else_result_expression ]END
功能:计算input_expression表达式之值,并与每一个when_expression表达式的值比较,若相等,则返回对应的result_expression表达式之值;否则返回else_result_expression表达式的值。
② 搜索型的CASE 函数。语法格式:
CASEWHEN Boolean_expression THEN result_expression […n ][ ELSE else_result_expression]END
功能:按指定顺序为每个 WHEN 子句的 Boolean_expression 表达式求值,返回第一个取值为 TRUE 的 Boolean_expression 表达式对应的 result_expression表达式之值;如果没有取值为TRUE的Boolean_expression表达式,则当指定 ELSE 子句时,返回 else_result_expression 之值;若没有指定 ELSE 子句,则返回 NULL。
【例】 使用CASE函数对读者按性别分类。
/*使用带有简单 CASE 函数的 SELECT 语句*/SELECT 借书证号,sex= CASE 性别WHEN 0 THEN '男生'WHEN 1 THEN '女生'ENDFROM xs
使用第二种格式的CASE语句则可以使用以下T-SQL语句:
SELECT 借书证号, 姓名, 专业, SEX= CASE WHEN 性别=1 THEN '男'WHEN 性别=0 THEN '女'ELSE '无'ENDFROM xs
(2)CAST 和 CONVERT函数
常用的类型转换有如下几种:
① 日期型→字符型。
② 字符型→日期型。
③ 数值型→字符型。
语法格式:
CAST ( expression AS data_type ) CONVERT (data_type[(length)], expression)
功能:将expression表达式的类型转换为data_type所指定的类型。
【例】 如下程序将检索库存量为3~10的ISBN、书名,并将库存量转换为char(20)。
/*如下例子同时使用 CAST 和 CONVERT*/-- 使用CAST实现.SELECT ISBN,书名,库存量FROM bookWHERE CAST(库存量 AS char(20)) LIKE '__' and 库存量>=3 and 库存量<10GO-- 使用 CONVERT实现.SELECT ISBN,书名,库存量FROM bookWHERE CONVERT(char(20),库存量) LIKE '__' and 库存量>=3 and 库存量<10GO
(3)COALESCE函数
COALESCE ( expression [ ,…n ] )
功能:返回参数表中第一个非空表达式的值,如果所有表达式均为 NULL,则 COALESCE 返回 NULL 值。
COALESCE(expression1,...n)
与如下形式的CASE 函数等价:
CASEWHEN (expression1 IS NOT NULL) THEN expression1...WHEN (expressionN IS NOT NULL) THEN expressionNELSE NULL
(4)ISNUMBRIC函数。
ISNUMBRIC函数用于判断一个表达式是否为数值类型。
ISNUMBRIC(expression)
如果输入表达式的计算值为有效的整数、浮点数、money或decimal类型时,ISNUMERIC返回1;否则返回 0。
日期函数可用在 SELECT 语句的选择列表或用在查询的 WHERE 子句中。
(1)GETDATE函数
GETDATE ( )
功能:按SQL Server标准内部格式返回当前系统日期和时间。返回值类型:datetime。
(2)DATEPAR函数
DATEPART(datepart,date)
功能:按datepart指定格式返回日期,返回值类型为int。datepart的取值可为非缩写形式或缩写形式。参数date的类型应为datetime或smalldatetime。
(3)DATEDIFF函数
DATEDIFF(datepart,startdate,enddate)
功能:按datepart指定的内容,返回startdate,enddate两个指定的日期时间之间的间隔,间隔可以以年、季度、月、周、天数或小时等为单位,这取决于datepart的取值。
参数类型与取值:datepart的取值范围如下表所示。
【例】 编写程序根据读者的出生时间,计算其年龄。
USE xsbookSET NOCOUNT ONDECLARE @startdate datetimeSET @startdate = getdate()SELECT DATEDIFF(yy,出生时间,@startdate ) AS 年龄FROM xs
(4)YEAR、MONTH、DAY函数
这三个函数分别返回指定日期的年、月、天部分,返回值都为整数。语法格式:
YEAR(date)MONTH(date)DAY(date)
游标函数用于返回游标的有关信息。主要有如下游标函数:
(1)@@CURSOR_ROWS
语法格式:
@@CURSOR_ROWS
功能:返回最后打开的游标中当前存在的满足条件的行数。
(2)CURSOR_STATUS
语法格式:
CURSOR_STATUS( { 'local' , 'cursor_name' } /*指明数据源为本地游标*/| { 'global' , 'cursor_name' } /*指明数据源为全局游标*/| { 'variable' , cursor_variable } /*指明数据源为游标变量*/)
功能:返回游标状态是打开还是关闭。CURSOR_STATUS函数返回值如下表所示。
(3)@@FETCH_STATUS
语法格式:
@@FETCH_STATUS
功能:返回== FETCH 语句执行后游标的状态==。返回值类型为integer。@@FETCH_STATUS返回值如表下所示。
===========================================================================
根据用户定义函数返回值的类型,可将用户定义函数分为如下两个类别:
(1)标量函数:用户定义函数返回值为标量值,这样的函数称为标量函数。
(2)表值函数:返回值为整个表的用户定义函数为表值函数。根据函数主体的定义方式,表值函数又可分为内嵌表值函数或多语句表值函数。
(1)标量函数的定义。
语法格式:
CREATE FUNCTION [ <数据库架构名>. ] <函数名> /*函数名部分*/( [ { @<形参名> [ AS ][ type_schema_name.]<数据类型> /*形参定义部分*/[ = default ] [ READONLY ] } [ ,...n ] ]) RETURNS <返回类型> /*返回参数的类型*/[ WITH <function_option> [ ,...n ] ] /*函数选项定义*/[ AS ]BEGIN function_body /*函数体部分*/RETURN scalar_expression /*返回语句*/END[ ; ]
其中:
<function_option>::= {[ ENCRYPTION ]| [ SCHEMABINDING ]| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]}
说明:
(1)<函数名>:函数名必须符合标识符的规则,对其架构来说该名在数据库中必须是唯一的。
(2)<形参名>:CREATE FUNCTION语句中可以声明一个或多个参数,用@符号作为第一个字符来指定形参名,每个函数的参数局部于该函数。
(3)<数据类型>:参数的数据类型可为系统支持的基本标量类型,不能为timestamp类型、用户定义数据类型、非标量类型(如cursor和table)。
(4)<返回类型>:函数使用RETURNS语句指定用户定义函数的返回值类型。
(5)function_body:由T-SQL语句序列构成的函数体。
(6)<function_option>:标量函数的选项。
从上述语法形式,归纳出标量函数的一般定义形式如下:
CREATE FUNCTION [所有者名.] 函数名( 参数1 [AS] 类型1 [ = 默认值 ] ) [ ,...参数n [AS] 类型n [ = 默认值 ] ] ] ) RETURNS 返回值类型[ WITH 选项 ] [ AS ]BEGIN函数体RETURN 标量表达式END
【例】 定义一个函数,按性别计算当前所有读者的平均年龄。
① 为了计算平均年龄,创建如下视图:
USE xsbookGOIF EXISTS(SELECT name FROM sysobjects WHERE name='VIEW_AGE' AND type='v')DROP VIEW VIEW_AGEGOCREATE VIEW VIEW_AGEAS SELECT 借书证号,性别,datepart(yyyy,GETDATE ( ))-datepart(yyyy,出生时间) as 年龄FROM xsGO
② 创建函数aver_age,用于按性别计算当前读者的平均年龄。
/*检查该函数aver_age是否已定义,若已定义,则删除之*/IF EXISTS(SELECT name FROM sysobjects WHERE name='aver_age' AND type='FN')DROP FUNCTION aver_ageGOCREATE FUNCTION aver_age(@sex bit) RETURNS intASBEGINDECLARE @aver intSELECT @aver=( SELECT avg(年龄) FROM VIEW_AGE WHERE 性别=@SEX)RETURN @averENDGO
(2)标量函数的调用
可按以下方式调用标量函数:
① 在SELECT语句中调用。调用形式:
架构名.函数名(实参1,…,实参n)
React
-
介绍一下react
-
React单项数据流
-
react生命周期函数和react组件的生命周期
-
react和Vue的原理,区别,亮点,作用
-
reactJs的组件交流
-
有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
-
项目里用到了react,为什么要选择react,react有哪些好处
-
怎么获取真正的dom
-
选择react的原因
-
react的生命周期函数
-
setState之后的流程
-
react高阶组件知道吗?
-
React的jsx,函数式编程
-
react的组件是通过什么去判断是否刷新的
-
如何配置React-Router
-
路由的动态加载模块
-
Redux中间件是什么东西,接受几个参数
-
redux请求中间件如何处理并发