sql函数

Sql Server基本函数

落花浮王杯 提交于 2020-01-01 13:33:50
1.字符串函数 长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(expression,start,length) 不多说了,取子串 right(char_expr,int_expr) 返回字符串右边int_expr个字符 字符操作类 upper(char_expr) 转为大写 lower(char_expr) 转为小写 space(int_expr) 生成int_expr个空格 replicate(char_expr,int_expr)复制字符串int_expr次 reverse(char_expr) 反转字符串 stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从 start开始的length个字符用char_expr2代替 ltrim(char_expr) rtrim(char_expr) 取掉空格 ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符 字符串查找 charindex(char_expr,expression) 返回char_expr的起始位置 patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0 2.数学函数 abs(numeric

sql server 排名函数:DENSE_RANK

ε祈祈猫儿з 提交于 2020-01-01 06:37:44
一、需求   之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。    需求很简单:求成绩排名前五的学生信息。   例如:      由于成绩可以并列,所以前五名可能有多个。例如:         测试数据:   declare @t table (ID int, StudentName nvarchar(15), Score int) insert into @t select 1,'黄一',99 union all select 2,'吴二',99 union all select 3,'张三',99 union all select 4,'李四',98 union all select 5,'王五',97 union all select 6,'赵六',96 union all select 7,'田七',95 union all select 8,'纪八',94 union all select 9,'邱九',93 union all select 10,'林十',92   二、自己实现   我的想法:既然可能出现并列,那么就用 DISTINCT 找到前五的成绩。ok,代码如下: select

sql server 视图中定义参数

落爺英雄遲暮 提交于 2020-01-01 02:40:26
内嵌用户定义函数 内嵌用户定义函数是返回 table 的用户定义函数的子集。内嵌函数可用于实现参数化视图的功能。 请看下面的视图: CREATE VIEW vw_CustomerNamesInWA AS SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = 'WA' 可创建更通用的版本 vw_CustomerNamesInRegion,方法是将 WHERE Region = 'WA' 替换为 WHERE Region = @RegionParameter 并让用户指定感兴趣的查看区域。然而,视图不支持在 WHERE 子句中指定的搜索条件的参数。 内嵌用户定义函数可用于支持在 WHERE 子句中指定的搜索条件的参数。下面是使用户得以在其选择中指定区域的函数示例: CREATE FUNCTION fn_CustomerNamesInRegion ( @RegionParameter nvarchar(30) ) RETURNS table AS RETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @RegionParameter ) GO -- Example of

SQL自定义函数

不想你离开。 提交于 2020-01-01 02:39:59
在SQL中不但可以定义存储过程,还可以定义函数,触发器。这里我们简单讲讲函数的使用。 如果你对这些语法不熟悉,可以查看sql存储过程入门系列课程。这里所用到的语法都是那个课程涉及到。 查看连接SQL存储过程入门系列教程 http://www.cnblogs.com/lideng/archive/2013/04/11/3013966.html 函数我们分为系统函数和自定义函数。 一,系统函数 请参考一下链接 http://msdn.microsoft.com/zh-cn/library/ms191238(v=sql.105).aspx 这里还是简单说下系统函数。 比如在存储过程(四)中提到了 捕获错误的函数      ERROR_NUMBER() 返回错误号。     ERROR_SEVERITY() 返回严重性。     ERROR_STATE() 返回错误状态号。     ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。     ERROR_LINE() 返回导致错误的例程中的行号。     ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。 这些函数都是系统函数。 比如我们想查看当前用户登录的用户名 SELECT SUSER_NAME(); 这样便会返回登录的用户名了。好了关于系统函数

【SQL学习笔记】单行函数

狂风中的少年 提交于 2019-12-28 22:12:32
单行函数的特征 单行函数对单行操作 每行返回一个结果 有可能返回值与原参数数据类型不一致 单行函数可以写在SELECT、WHERE、ORDER BY子句中 有些函数没有参数,有些函数包括一个或多个参数 函数可以嵌套 一、字符函数 1、大小写控制函数 LOWER ( 'SQL Course' ) :结果为 sql course UPPER ( 'SQL Course' ) :结果为 SQL COURSE INITCAP ( 'SQL Course' ) :结果为 Sql Course 2、字符控制函数 CONCAT ( 'Hello' , 'World' ) :结果为 HelloWorld SUBSTR ( 'HelloWorld' , 1 , 5 ) :结果为 Hello LENGTH ( 'HelloWorld' ) :结果为 10 INSTR ( 'HelloWorld' , 'W' ) :结果为 6 LPAD ( 'Hello' , 10 , '*' ) :结果为 * * * * * Hello RPAD ( 'Hello' , 10 , '*' ) :结果为 Hello * * * * * TRIM ( 'H' FROM 'HelloWorld' ) :结果为 elloWorld REPLACE ( 'Hello' , 'e' , '*' ) :结果为 H * llo 二

SQL replace()替换函数使用

匆匆过客 提交于 2019-12-28 05:27:51
replace() 功能:替换字符串 参数格式: replace ( string_expression , string_pattern , string_replacement ) 参数说明: string_expression,要搜索字符串的表达式,可以是字符或二进制数据类型 string_pattern,要查找的字符串,可以是字符或二进制数据类型,不能是空字符串(’’) string_replacement,替换的字符串,可以是字符或二进制数据类型。 返回类型: 如果其中一个输入类型为nvarchar,则返回nvarchar;否则返回varchar 如果任何一个参数为null,则返回null 查询替换 select replace(string,from_str,to_str) from 表名 修改替换 update 表名 set 字段名=replace(string,from_str,to_str) 插入替换 replace into 表名 values(‘字段1’,‘字段2’,‘字段3’,…) 举例: Products表内容如下: 插入替换: REPLACE insert into Products values ( newid ( ) , 'orange' , 42.36 , getdate ( ) ) --插入替换,没有记录直接插入 插入替换结果: 修改替换:

sql中的 where 、group by 和 having 用法解析

别说谁变了你拦得住时间么 提交于 2019-12-27 21:27:01
--sql中的 where 、group by 和 having 用法解析 --如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 select DepartmentID as '部门名称',COUNT(*) as '个数' from BasicDepartment group by DepartmentID --这个就是使用了group by +字段 进行了分组,其中我们就可以理解为我们按照了部门的名称ID --DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; --如果不用count(*) 而用类似下面的语法 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID --将会出现错误 --选择列表中的列 'BasicDepartment.DepartmentName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。 这就是我们需要注意的一点,如果在返回集字段中,这些字段 要么就要包含在Group By语句的后面,作为分组的依据; 要么就要被包含在聚合函数中,作为分组的依据; --出现的错误详解:咱们看看group by 的执行的过程,先执行select

SQL 中having 和where的区别分析

牧云@^-^@ 提交于 2019-12-27 10:07:58
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句 限制返回的结果集。groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 在带有groupby子句的查询语句中,在select列表中指定的列要么是groupby子句中指定的列,要么包含聚组函数 复制代码 代码如下: selectmax(sal),jobempgroupbyjob; (注意max(sal),job的job并非一定要出现,但有意义) 查询语句的select和groupby,having子句是聚组函数唯一出现的地方,在where子句中不能使用聚组函数。 复制代码 代码如下: selectdeptno,sum(sal)fromempwheresal>1200groupbydeptnohavingsum(sal)>8500orderbydeptno; 当在gropuby子句中使用having子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句

DB2中一些常用sql函数

三世轮回 提交于 2019-12-26 17:00:34
1.merge into ...using ...when matched then ... 应用场景:此函数一般用于表与表之间字段的更新,判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表,是有有很多可选项。 用例:有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。 merge into 目标表 t1 using 源表 t2 on(t1.条件字段1 = t2.条件字段1 and t1.条件字段2 = t2.条件字段2 ……) when matched then update set t1.更新字段 = t2.字段 when not macthed then insert into t1(字段1, 字段2 ……)values(值1, 值2 ……) 2.replace update [table_name] set [column_name] = replace([column_name], '被替换的数据', '替换的数据') 3.case when ... end case when 条件 then 结果1 else 结果2 end 其中when可以重复多次 示例: select case when 条件2 then 结果1 when 条件2 then

SQL中MAX()和MIN()函数的使用

一曲冷凌霜 提交于 2019-12-26 16:05:23
在 SQL 数据库中,最大/最小值函数—MAX()/MIN()是经常要用到的,下面就将为您分别介绍MAX()函数和MIN()函数的使用,供您参考,希望对您学习SQL数据库能有些帮助。 当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。语法如下。 SELECT MAX (column_name) / MIN (column_name) FROM table_name 说明:列column_name中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄。实例代码: SELECT MAX (AGE) AS MAXAGE FROM TEACHER 运行结果如图1示。 图1TEACHER表中教师的最大年龄 实例8 在WHERE子句中使用子查询返回最大值 查询TEACHER表中年纪最大的教师的教工号、姓名、性别等信息。 实例代码: SELECT TNAME, DNAME, TSEX, SAL, AGE FROM TEACHER WHERE AGE=(SELECT MAX (AGE) FROM TEACHER) 运行结果如图2示。 图2在WHERE子句中使用子查询返回最大值 MAX()和MIN(