SQL SERVER函数大全
- 格式:docx
- 大小:361.72 KB
- 文档页数:47
sqlserve 常用函数
1. `SUM()`: 用于计算指定列的总和。
2. `AVG()`: 用于计算指定列的平均值。
3. `COUNT()`: 用于计算指定列的行数或某个值的出现次数。
4. `MAX()`: 用于找出指定列中的最大值。
5. `MIN()`: 用于找出指定列中的最小值。
6. `GROUP BY`: 用于根据一个或多个列对结果进行分组。
7. `HAVING`: 用于在分组后对结果进行筛选。
8. `JOIN`: 用于将两个或多个表中的数据连接起来。
9. `WHERE`: 用于在查询结果中筛选满足条件的数据。
10. `ORDER BY`: 用于根据一个或多个列对结果进行排序。
11. `DISTINCT`: 用于返回唯一的、不重复的结果集。
12. `SUBSTRING`: 用于从字符串中提取子字符串。
13. `DATEPART`: 用于从日期或时间值中提取部分信息,例如年、月、日等。
14. `ISNULL`: 用于检查一个表达式是否为 NULL。
15. `COALESCE`: 用于替换 NULL 值。
这只是 SQL Server 中一些常用函数的一小部分示例。
SQL Server 还提供了许多其他函数,用于处理字符串、日期、数学计算、聚合等各种操作。
具体使用哪些函数取决于你的具体需求和数据操作。
sql server字符串函数SQL Server提供了许多字符串函数,这些函数可以用于处理和操作字符串。
下面是一些常用的SQL Server字符串函数:1. LEN() 函数:返回一个字符串的长度。
2. LEFT() 函数:返回一个字符串的左侧指定数量的字符。
3. RIGHT() 函数:返回一个字符串的右侧指定数量的字符。
4. SUBSTRING() 函数:返回一个字符串中从指定位置开始的指定长度的子串。
5. REPLACE() 函数:替换一个字符串中所有出现的指定子串为另一个子串。
6. UPPER() 函数:将一个字符串转换为大写。
7. LOWER() 函数:将一个字符串转换为小写。
8. LTRIM() 函数:去除一个字符串左侧的空格。
9. RTRIM() 函数:去除一个字符串右侧的空格。
10. CONCAT() 函数:将两个或多个字符串连接成一个新的字符串。
下面是这些函数在SQL Server中使用示例:-- LEN()函数示例SELECT LEN('Hello World') AS LengthOfHelloWorld;-- LEFT()函数示例SELECT LEFT('Hello World', 5) AS LeftFiveCharacters;-- RIGHT()函数示例SELECT RIGHT('Hello World', 5) AS RightFiveCharacters;-- SUBSTRING()函数示例SELECT SUBSTRING('Hello World', 7, 5) AS SubstringFromSevenToEleven;-- REPLACE()函数示例SELECT REPLACE('Hello World', 'World', 'SQL Server') AS ReplaceWorldWithSqlServer;-- UPPER()函数示例SELECT UPPER('Hello World') AS UpperCaseString;-- LOWER()函数示例SELECT LOWER('Hello World') AS LowerCaseString;-- LTRIM()函数示例SELECT LTRIM(' Hello World') AS TrimmedString;-- RTRIM()函数示例SELECT RTRIM('Hello World ') AS TrimmedString;-- CONCAT()函数示例SELECT CONCAT('Hello', ' ', 'World') AS ConcatenatedString;这些SQL Server字符串函数可以帮助您更轻松地处理和操作字符串。
SQL SERVER函数大全SQL SERVER命令大全SQLServer和Oracle的常用函数对比1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取整(截取)S:select cast(-1.002 as int) valueO:select trunc(-1.002) value from dual5.四舍五入S:select round(1.23456,4) value 1.23460O:select round(1.23456,4) value from dual 1.23466.e为底的幂S:select Exp(1) value 2.7182818284590451O:select Exp(1) value from dual 2.718281827.取e为底的对数S:select log(2.7182818284590451) value 1O:select ln(2.7182818284590451) value from dual; 18.取10为底对数S:select log10(10) value 1O:select log(10,10) value from dual; 19.取平方S:select SQUARE(4) value 16O:select power(4,2) value from dual 1610.取平方根S:select SQRT(4) value 2O:select SQRT(4) value from dual 211.求任意数为底的幂S:select power(3,4) value 81O:select power(3,4) value from dual 8112.取随机数S:select rand() valueO:select sys.dbms_random.value(0,1) value from dual;13.取符号S:select sign(-8) value -1O:select sign(-8) value from dual -1----------数学函数14.圆周率S:SELECT PI() value 3.1415926535897931O:不知道15.sin,cos,tan 参数都以弧度为单位例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道) DEGREES:弧度-〉角度RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值S:select max(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值S:select min(value) value from(select 1 valueunionselect -2 valueunionselect 4 valueunionselect 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替)S:select F1,IsNull(F2,10) value from TblO:select F1,nvl(F2,10) value from Tbl--------数值间比较-------------------21.求字符序号S:select ascii('a') valueO:select ascii('a') value from dual22.从序号求字符S:select char(97) valueO:select chr(97) value from dual23.连接S:select '11'+'22'+'33' valueO:select CONCAT('11','22')||33 value from dual23.子串位置--返回3S:select CHARINDEX('s','sdsq',2) valueO:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置--返回2,参数去掉中间%则返回7S:select patindex('%d%q%','sdsfasdqe') valueO:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR>select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串S:select substring('abcd',2,2) valueO:select substr('abcd',2,2) value from dual25.子串代替返回aijklmnefS:SELECT STUFF('abcdef', 2, 3, 'ijklmn') valueO:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换S:没发现O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度S:len,datalengthO:length28.大小写转换lower,upper29.单词首字母大写S:没发现O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)S:select space(10)+'abcd' valueO:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)S:select 'abcd'+space(10) valueO:select RPAD('abcd',14) value from dual32.删除空格S:ltrim,rtrimO:ltrim,rtrim,trim33. 重复字符串S:select REPLICATE('abcd',2) valueO:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dualSQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差返回0-4,4为同音,1最高--------------日期函数35.系统时间S:select getdate() valueO:select sysdate value from dual36.前后几日直接与整数相加减37.求日期S:select convert(char(10),getdate(),20) valueO:select trunc(sysdate) value from dualselect to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间S:select convert(char(8),getdate(),108) valueO:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分S:DATEPART 和DATENAME 函数(第一个参数决定)O:to_char函数第二个参数决定参数----------下表需要补充---------------year yy, yyyyquarter qq, q (季度)month mm, m (m O无效)dayofyear dy, y (O表星期)day dd, d (d O无效)week wk, ww (wk O无效)weekday dw (O不清楚)Hour hh,hh12,hh24 (hh12,hh24 S无效)minute mi, n (n O无效)second ss, s (s O无效)millisecond ms (O无效)----------------------------------------------40.当月最后一天S:不知道O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)S:不知道O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间S:可以直接转或者select cast('2004-09-08'as datetime) valueO:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;43.求两日期某一部分的差(比如秒)S:select datediff(ss,getdate(),getdate()+12.3) valueO:直接用两个日期相减(比如d1-d2=12.3)SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)S:select dateadd(mi,8,getdate()) valueO:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间S:不知道O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------AST ADT 大西洋标准时间BST BDT 白令海标准时间CST CDT 中部标准时间EST EDT 东部标准时间GMT 格林尼治标准时间HST HDT 阿拉斯加—夏威夷标准时间MST MDT 山区标准时间NST 纽芬兰标准时间PST PDT 太平洋标准时间YST YDT YUKON标准时间Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数Oracle Microsoft SQL Server把字符转换为ASCII ASCII ASCII字串连接CONCAT (expression + expression)把ASCII转换为字符CHR CHAR返回字符串中的开始字符(左起)INSTR CHARINDEX把字符转换为小写LOWER LOWER把字符转换为大写UPPER UPPER填充字符串的左边LPAD N/A清除开始的空白LTRIM LTRIM清除尾部的空白RTRIM RTRIM字符串中的起始模式(pattern)INSTR PATINDEX 多次重复字符串RPAD REPLICATE字符串的语音表示SOUNDEX SOUNDEX重复空格的字串RPAD SPACE从数字数据转换为字符数据TO_CHAR STR子串SUBSTR SUBSTRING替换字符REPLACE STUFF将字串中的每个词首字母大写INITCAP N/A翻译字符串TRANSLATE N/A字符串长度LENGTH DATELENGTH or LEN列表中最大的字符串GREATEST N/A列表中最小的字符串LEAST N/A如果为NULL则转换字串NVL ISNULL日期函数函数Oracle Microsoft SQL Server日期相加(date column +/- value) orADD_MONTHS DATEADD两个日期的差(date column +/- value) or MONTHS_BETWEEN DATEDIFF当前日期和时间SYSDATE GETDATE()一个月的最后一天LAST_DAY N/A时区转换NEW_TIME N/A日期后的第一个周日NEXT_DAY N/A代表日期的字符串TO_CHAR DATENAME代表日期的整数TO_NUMBER(TO_CHAR)) DATEPART日期舍入ROUND CONVERT日期截断TRUNC CONVERT字符串转换为日期TO_DATE CONVERT如果为NULL则转换日期NVL ISNULL转换函数函数Oracle Microsoft SQL Server数字转换为字符TO_CHAR CONVERT字符转换为数字TO_NUMBER CONVERT日期转换为字符TO_CHAR CONVERT字符转换为日期TO_DATE CONVERT16进制转换为2进制HEX_TO_RAW CONVERT2进制转换为16进制RAW_TO_HEX CONVERT其它行级别的函数函数Oracle Microsoft SQL Server返回第一个非空表达式DECODE COALESCE当前序列值CURRVAL N/A下一个序列值NEXTVAL N/A如果exp1 = exp2, 返回null DECODE NULLIF用户登录账号ID数字UID SUSER_ID用户登录名USER SUSER_NAME用户数据库ID数字UID USER_ID用户数据库名USER USER_NAME当前用户CURRENT_USER CURRENT_USER用户环境(audit trail) USERENV N/A在CONNECT BY子句中的级别LEVEL N/A合计函数函数Oracle Microsoft SQL ServerAverage AVG AVGCount COUNT COUNTMaximum MAX MAXMinimum MIN MINStandard deviation STDDEV STDEV or STDEVPSummation SUM SUMVariance VARIANCE VAR or VARPOracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:EXTRACT(YEAR FROM 日期)T_SQL命令大全--语句功能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域--数据控制GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务控制COMMIT --结束当前事务ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述准备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y' else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’then e_wage*1.08when job_level = ’2’then e_wage*1.07when job_level = ’3’then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator valueex 宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)---------只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) ---------排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)---------子查询---------除非能确保内层select只返回一个行的值,---------否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name select stockname , "stocknumber" = count(*) from table_name group by stockname --------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id --------左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id --------右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx") value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name -----------删除表中所有行,仍保持表的完整性drop table table_name ---------------完全删除表***alter table*** ---修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ----显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... -----实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ----删除Stockname的default约束***function(/*常用函数*/)***----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------------------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------------------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date> )--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date> )--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date> ) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date> ) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'> ) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id> ) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name]}--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expression>, <replacement_value> ) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2> )--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值。
在SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示。
在下列的CONVERT()函数例子中,数据类型的length和style参数是可选的: CONVERT (data-type [(length)], expression[,style])可将它简化为如下形式,因为现在不讨论如何使用数据类型:CONVERT(date_type, expression[,style])根据上面的定义,CONVERT()函数可接受2个或3个参数。
因此,下列两个例子都是正确的:SELECT CONVERT(Varchar(20),GETDATE())SELECT CONVERT(Varchar(20),GETDATE(), 101)这个函数的第一个参数是数据类型Varchar(20),第2个参数是另一个函数GETDATE()。
GETDATE()函数用datetime数据类型将返回当前的系统日期和时间。
第2条语句中的第3个参数决定了日期的样式。
这个例子中的101指以mm/dd/yyyy格式返回日期。
本章后面将详细介绍GETDATE()函数。
即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE()函数。
注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。
确定性函数由于数据库引擎的内部工作机制,SQL Server必须根据所谓的确定性,将函数分成两个不同的组。
这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。
如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。
如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。
例如,GETDATE()函数是非确定性函数,因为它不会两次返回相同的值。
为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。
SQL Server函数大全--聚合函数use pubsgoselect avg(distinct price) --算平均数from titleswhere type='business'gouse pubsgoselect max(ytd_sales) --最大数from titlesgouse pubsgoselect min(ytd_sales) --最小数from titlesgouse pubsgoselect type,sum(price),sum(advance) --求和from titlesgroup by typeorder by typegouse pubsgoselect count(distinct city) --求个数from authorsgouse pubsgoselect stdev(royalty) --返回给定表达式中所有值的统计标准偏差from titlesgouse pubsgoselect stdevp(royalty) --返回表达式中所有制的填充统计标准偏差from titlesgouse pubsgoselect var(royalty) --返回所有值的统计方差from titlesgouse pubsgoselect varp(royalty) --返回所有值的填充的统计方差from titlesgo--数学函数select sin(23.45),atan(1.234),rand(),PI(),sign(-2.34) --其中rand是获得一个随机数--配置函数SELECT @@VERSION --获取当前数据库版本SELECT @@LANGUAGE --当前语言--时间函数select getdate() as 'wawa_getdate' --当前时间select getutcdate() as 'wawa_getutcdate' --获取utc时间select day(getdate()) as 'wawa_day' --取出天select month(getdate()) as 'wawa_month' --取出月select year(getdate()) as 'wawa_year' --取出年select dateadd(d,3,getdate()) as wawa_dateadd --加三天,注意'd'表示天,'m'表示月,'yy'表示年,下面一样select datediff(d,'2004-07-01','2004-07-15') as wawa_datediff --计算两个时间的差select datename(d,'2004-07-15') as wawa_datename --取出时间的某一部分select datepart(d,getdate()) as wawa_datepart --取出时间的某一部分,和上面的那个差不多--字符串函数select ascii(123) as '123',ascii('123') as '"123"',ascii('abc') as '"abc"' --转换成ascii码select char(123),char(321),char(-123) --根据ascii转换成字符select lower('ABC'),lower('Abc'),upper('Abc'),upper('abc') --转换大小写select str(123.45,6,1), str(123.45,2,2) --把数值转换成字符串select ltrim(' "左边没有空格"') --去空格select rtrim('"右边没有空格" ') --去空格select ltrim(rtrim(' "左右都没有空格" ')) --去空格select left('sql server',3),right('sql server',6) --取左或者取右use pubsselect au_lname,substring(au_fname,1,1) --取子串from authorsorder by au_lnameselect charindex('123','abc123def',2) --返回字符串中指定表达式的起始位置select patindex('123','abc123def'),patindex('3%','abc123def') --返回表达式中某模式第一次出现的起始位置select quotename('abc','{'),quotename('abc') --返回由指定字符扩住的字符串select reverse('abc'),reverse('上海') --颠倒字符串顺序select replace('abcdefghicde','cde','xxxx') --返回呗替换了指定子串的字符串select space(5),space(-2)--系统函数select host_name() as 'host_name',host_id() as 'host_id',user_name() as 'user_name',user_id() as 'user_id',db_name() as 'db_name'--变量的定义使用--声明局部变量declare @mycounter intdeclare @last_name varchar(30),@fname varchar(20),@state varchar(2) --一下声明多个变量--给变量赋值use northwindgodeclare @firstnamevariable varchar(20),@regionvariable varchar(30)set @firstnamevariable='anne' --可以用set,也可以用select给变量赋值,微软推荐用set,但select 在选择一个值直接赋值时很有用set @regionvariable ='wa'select lastname,firstname,title --用声明并赋值过的变量构建一个Select语句并查询from employeeswhere firstname= @firstnamevariable or region=@regionvariablego--全局变量select @@version --返回数据库版本select @@error --返回最后的一次脚本错误select @@identity --返回最后的一个自动增长列的id--while,break,continue的使用--首先计算所有数的平均价格,如果低于30的话进入循环让所有的price翻倍,--里面又有个if来判断如果最大的单价还大于50的话,退出循环,否则继续循环,知道最大单价大于50就break出循环,呵呵,--我分析的应该对吧.use pubsgowhile (select avg(price) from titles) <$30beginupdate titlesset price=price*2select max(price) from titlesif(select max(price) from titles) >$50breakelsecontinueprint 'too much for the marker to bear'--事务编程经典例子--begin transaction是开始事务,commit transaction是提交事务,rollback transaction是回滚事务--这个例子是先插入一条记录,如果出现错误的话就回滚事务,也就是取消,并直接return(返回),如果没错的话就commit 提交这个事务了哦--上面的那个return返回可以返回一个整数值,如果这个值是0的话就是执行的时候没出错,如果出错了就是一个负数,--这个return也可以用在存储过程中,可用用exec @return_status= pro_name来获取这个值use pubsgobegin tran mytraninsert into stores(stor_id,stor_name)values('333','my books')goinsert into discounts(discounttype,stor_id,discount)values('清仓甩卖','9999',50.00)if @@error<>0beginrollback tran mytranprint '插入打折记录出错'returnendcommit tran mytran--事务处理的保存点示例--做了事务保存点后可以rollback(回滚)到指定的保存点,不至于所有的操作都不能用use pubsgoselect * from storesbegin transaction testsavetraninsert into stores(stor_id,stor_name)values('1234','W.Z.D Book')save transaction before_insert_data2goinsert into stores(stor_id,stor_name)values('5678','foreat Books')gorollback transaction before_insert_data2select * from stores--存储存储过程use pubsif exists(select name from sysobjects where name= 'proc_calculate_taxes' and type='P')drop procedure proc_calculate_taxescreate procedure proc_calculate_taxes (@p1 smallint=42,@p2 char(1),@p3 varchar(8)='char') asselect *from titles--执行过程EXECUTE PROC_CALCULATE_TAXES @P2='A'。
SQL Server 是一种关系型数据库管理系统,广泛应用于企业和个人的数据存储和管理。
在 SQL Server 中,函数是一种非常重要的功能,用于对数据进行处理和计算。
本文将介绍 SQL Server 中常用的函数,包括数学函数、字符串函数、日期时间函数等,并给出相应的示例和用法说明。
一、数学函数1. ABS():返回一个数的绝对值。
示例:SELECT ABS(-10) as Result;结果:102. ROUND():将一个数四舍五入到指定的小数位数。
示例:SELECT ROUND(3.14159, 2) as Result;结果:3.143. POWER():返回给定数的指定次幂。
示例:SELECT POWER(2, 3) as Result;结果:84. CEILING():返回大于或等于指定表达式的最小整数。
示例:SELECT CEILING(3.14) as Result;结果:45. FLOOR():返回小于或等于指定表达式的最大整数。
示例:SELECT FLOOR(3.14) as Result;结果:3二、字符串函数1. LEN():返回指定字符串的长度。
示例:SELECT LEN('Hello') as Result;结果:52. UPPER():将字符串转换为大写字母。
示例:SELECT UPPER('hello') as Result;结果:HELLO3. LOWER():将字符串转换为小写字母。
示例:SELECT LOWER('HELLO') as Result;结果:hello4. LEFT():返回字符串左边指定长度的子串。
示例:SELECT LEFT('Hello', 3) as Result;结果:Hel5. RIGHT():返回字符串右边指定长度的子串。
示例:SELECT RIGHT('Hello', 3) as Result;结果:llo三、日期时间函数1. GETDATE():返回当前的系统日期和时间。
一、.修改查询出来的字段属性①、cast 和convert都是用来将一种数据类型的表达式转换为另一种数据类型的表达式cast一般更容易使用,convert的优点是可以格式化日期和数值.⑴、cast()语句语句形式为:select cast(字段as int) as 自定义字段名from table1查询table1的字段内容并且将数据类型转换为int类型显现出来,重新附一个别名⑵、Convert() 语句⑴语句形式为:select convert(int,字段) as 自定义字段名from table2查询table1的字段内容并且将数据类型转换为int类型显现出来,重新附一个别名⑵语句形式为:select convert(char(10),getdate(),102)获取当前日期,并且格式为yy.mm.dd(最多占10个字节)第三参数如下:日期类型格式10003 19 20084:45PM10103/19/20081022008.03.1910319/03/200810419.03.200810519-03-200810619 03 200810703 19, 200810816:45:0010903 19 20084:45:00:11003-19-20081112008/03/191122008031911319 03 2008 16:45:00:11416:45:00:000②、str()函数--数值转换字符类型函数格式:str(参数1(必填),参数2(选填),参数3(选填))参数1 数值字段,参数2 指定的总长度(包括逗号,小数,整数与空,默认为10),参数3 保留的小数位数转换规则:先看整数部分是否满足转换长度,只要长度值小于整数长度就返回“*”;若长度值大于整数长度,再看小数部分。
小数部分能按要求转换后仍不足转换长度,再在左侧补空格二、对小数值进行取值①、round() 函数--遵循四舍五入保留指定的小数位函数格式:round(参数1,参数2)参数1:数值。
sql server 系统函数大全一、字符转换函数1、ASCII()返回字符表达式最左端字符的ASCII 码值。
在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()将ASCII 码转换为字符。
如果没有输入0 ~ 255之间的ASCII 码值,CHAR()返回NULL 。
3、LOWER()和UPPER()LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
4、STR()把数值型数据转换为字符型数据。
STR (<float_expression>[,length[,<decimal>]])length 指定返回的字符串的长度,decimal 指定返回的小数位数。
如果没有指定长度,缺省的length 值为10,decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;当length 小于小数点左边(包括符号位)的位数时,返回length 个*;先服从length ,再取decimal ;当返回的字符串位数小于length ,左边补足空格。
二、去空格函数1、LTRIM() 把字符串头部的空格去掉。
2、RTRIM() 把字符串尾部的空格去掉。
三、取子串函数1、left()LEFT (<character_expression>,<integer_expression>)返回character_expression 左起integer_expression 个字符。
2、RIGHT()RIGHT (<character_expression>,<integer_expression>)返回character_expression 右起integer_expression 个字符。
3、SUBSTRING()SUBSTRING (<expression>,<starting_ position>,length)返回从字符串左边第starting_ position 个字符起length个字符的部分。
sql server 常用系统函数SQL Server是一款常用的关系型数据库管理系统,它提供了许多强大的系统函数来方便开发人员进行数据处理和管理。
本文将介绍SQL Server常用的系统函数,包括日期时间函数、字符串函数、数学函数、聚合函数等。
一、日期时间函数1. GETDATE():获取当前日期时间。
2. DATEADD():在日期上进行加减操作。
3. DATEDIFF():计算两个日期之间的差值。
4. DATEPART():从日期中提取特定部分的值,如年、月、日、小时、分钟等。
5. CONVERT():将日期时间类型转换为其他类型(如字符串)。
二、字符串函数1. LEN():获取字符串长度。
2. LEFT()、RIGHT()、SUBSTRING():获取字符串的左、右、子字符串。
3. REPLACE():替换字符串中的指定子串。
4. CHARINDEX():查找指定子串在字符串中的位置。
5. LTRIM()、RTRIM():去除字符串左右两侧的空格。
三、数学函数1. ABS():获取绝对值。
2. ROUND()、CEILING()、FLOOR():对数值进行四舍五入、向上取整、向下取整。
3. SIGN():获取数值的符号。
4. POWER()、SQRT()、EXP()、LOG():进行数值计算和运算。
四、聚合函数1. AVG()、SUM()、MIN()、MAX():对一组数据进行平均值、求和、最小值、最大值的计算。
2. COUNT():计算一组数据中元素的个数。
以上是SQL Server常用的系统函数,它们可以方便地进行数据处理和管理,提高开发效率和数据处理的准确性。
在实际应用中,可以根据具体的需求选择合适的函数,进行灵活的数据处理和操作。
1.字符串函数:len(expression)返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格length(expression,variable)指定字符串或变量名称的长度。
substring(expression,start,length) 不多说了,取子串right(char_expr,int_expr) 返回字符串右边int_expr个字符concat(str1,str2,...)返回来自于参数连结的字符串。
datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格length(expression,variable)指定字符串或变量名称的长度。
substring(expression,start,length) 不多说了,取子串right(char_expr,int_expr) 返回字符串右边int_expr个字符concat(str1,str2,...)返回来自于参数连结的字符串。
字符操作类:upper(char_expr) 转为大写lower(char_expr) 转为小写UCase(string) 返回 Variant (String),其中包含转成大写的字符串。
LCase(string) 返回字符串的小写形式。
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 locate(substr,str,pos) 返回子串substr在字符串str第一个出现的位置2.数学函数abs(numeric_expr) 求绝对值ceiling(numeric_expr) 取大于等于指定值的最小整数exp(float_expr) 取指数floor(numeric_expr) 小于等于指定值得最大整数power(numeric_expr,power) 返回power次方rand([int_expr]) 随机数产生器round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入sign(int_expr) 根据正数,0,负数,,返回+1,0,-1sqrt(float_expr) 平方根exp(float x):求e的x次幂tan(float x):计算x(弧度表示)的正切值。
sqlserver函数大全及举例在SQL Server中,函数是一种用于执行特定任务的代码块。
以下是SQL Server中可用的一些最常见的函数及其举例:1. 字符串函数LEN - 返回字符串的长度。
SELECT LEN('Hello World'); -- 11RIGHT - 返回指定字符串右侧的字符。
REPLACE - 替换字符串中的字符。
2. 数学函数SUM - 返回数值列的总和。
SELECT SUM(Sales) FROM SalesTable;3. 日期函数GETDATE - 返回当前日期和时间。
SELECT GETDATE();SELECT DATEDIFF(day, '2022-01-01', '2022-01-10'); -- 9DATEADD - 在日期中添加指定的时间间隔。
4. 聚合函数COUNT - 返回指定列或表的行数。
GROUP BY - 根据指定的列对结果进行分组。
SELECT City, COUNT(*) FROM EmployeeTable GROUP BY City;5. 逻辑函数CASE - 在满足某些条件时执行不同的代码块。
SELECT CASE WHEN Sales > 1000 THEN 'High' ELSE 'Low' END FROM SalesTable;COALESCE - 返回第一个非空值。
NULLIF - 如果两个参数相等,则返回NULL。
以上是SQL Server中常用的函数及其举例,使用函数可以大大简化SQL查询的复杂度,提高代码的可读性和复用性。
SQLServer常⽤函数总结SQL去空格函数1、ltrim(‘内容’)--去掉字符左边的空格代码如下declare @str varchar(100)set @str=' ADFADF'select @strselect ltrim(@str)2、rtrim(‘内容’)---去掉列值右边的空格 ---作⽤和LTRIM()⼀样,这⾥不做介绍3、ltrim(rtrim('内容')):去掉字符串左边和右边的空格4、replace(计算字段,' ','')---去掉计算字段列值中所有的空格,如下代码:declare @str varchar(100)set @str='Hello Work'select @strselect REPLACE(@str,' ','')SQL常⽤函数1、left() ---返回字符串左边的字符:代码如下declare @str varchar(100)set @str='HelloWork'select @strselect left(@str,2)2、right() ---返回字符串右边的字符⽤法和LEFT()⽅法相反3、substring( expression, start, length ) --返回从字符串expression左边第start个字符起length个字符的部分。
declare @str varchar(100)set @str='hellowork'select SUBSTRING(@str,6,4)4、len() (也可以使⽤datalength()) ---返回字符串的长度declare @str varchar(100)set @str='HelloWork'select datalength(@str)select len(@str)5、upper() ---将字符串转为⼤写declare @str varchar(100)set @str='hellowork'select upper(@str)6、lower() ---将字符串转换成⼩写⽤法和UPPER()函数相反!7、stuff( character_expression , start , length ,character_expression ) --返回从字符串character_expression左边第start个字符开始要删除length个字符,在start开始删除的位置插⼊新字符串character_expression 。
SQLServer之常⽤函数总结详解SQLServer中的常⽤函数字符串函数len() 计算字符串的长度select LEN(name) from test1 --计算name的长度⼤⼩写转换 lower() upper()select lower('STUDENT !')select upper('student !')去空 ltrim() 字符串左侧的空格去掉,rtrim()字符串右侧的空格去掉declare @str varchar(100) = ' a a a 'select ltrim(@str)select rtrim(@str)字符串截取 substring() left() right()select substring('HelloWorld!',6,6) --可截取任意长度select left('HelloWorld!' ,5) --从左开始截取select right('HelloWorld!' ,6) --从右开始截取字符串替换 replace()select replace('HelloWorld!','o','e') --string,要被替换的字符串,替换的字符串字符串掉个顺序 reverse()select reverse('abc') --cba返回字符串1在字符串2中出现的未位置 charindex()charindex(srt1 ,srt2)--srt1 在srt2中的开始位置select charindex('H','elloHWorld') 结果为:5 --只能查第⼀次出现的位置,匹配不到返回0指定的次数重复字符串值 replicate()select replicate('abc',4) 结果为:abcabcabcabc聚合函数聚合函数对⼀组值计算后返回单个值。
关于SQLServer的所有函数(对⼯作或学习也很有帮助)BZ⽐较懒,平时⼯作Oracle Mysql SQL Server换着⽤(⼯作需要)对于使⽤函数,除了常⽤的基本上都是⽤⼀个度娘⼀个,所以今天对SQL Server函数进⾏了⼀个汇总,希望能帮到你:1、聚合函数1--max最⼤值、min最⼩值、count统计、avg平均值、sum求和、var求⽅差23select4max(age) max_age,5min(age) min_age,6count(age) count_age,7avg(age) avg_age,8sum(age) sum_age,9var(age) var_age10from student;2、⽇期时间函数1select dateAdd(day, 3, getDate());--加天2select dateAdd(year, 3, getDate());--加年3select dateAdd(hour, 3, getDate());--加⼩时4--返回跨两个指定⽇期的⽇期边界数和时间边界数5select dateDiff(day, '2011-06-20', getDate());6--相差秒数7select dateDiff(second, '2011-06-22 11:00:00', getDate());8--相差⼩时数9select dateDiff(hour, '2011-06-22 10:00:00', getDate());10select dateName(month, getDate());--当前⽉份11select dateName(minute, getDate());--当前分钟12select dateName(weekday, getDate());--当前星期13select datePart(month, getDate());--当前⽉份14select datePart(weekday, getDate());--当前星期15select datePart(second, getDate());--当前秒数16select day(getDate());--返回当前⽇期天数17select day('2011-06-30');--返回当前⽇期天数18select month(getDate());--返回当前⽇期⽉份19select month('2011-11-10');20select year(getDate());--返回当前⽇期年份21select year('2010-11-10');22select getDate();--当前系统⽇期23select getUTCDate();--utc⽇期3、数学函数1select pi();--PI函数2select rand(100), rand(50), rand(), rand();--随机数3select round(rand(), 3), round(rand(100), 5);--精确⼩数位4--精确位数,负数表⽰⼩数点前5select round(123.456, 2), round(254.124, -2);6select round(123.4567, 1, 2);4、元数据1select col_name(object_id('student'), 1);--返回列名2select col_name(object_id('student'), 2);3--该列数据类型长度4select col_length('student', col_name(object_id('student'), 2));5--该列数据类型长度6select col_length('student', col_name(object_id('student'), 1));7--返回类型名称、类型id8select type_name(type_id('varchar')), type_id('varchar');9--返回列类型长度10select columnProperty(object_id('student'), 'name', 'PRECISION');11--返回列所在索引位置12select columnProperty(object_id('student'), 'sex', 'ColumnId');5、字符串函数1select ascii('a');--字符转换ascii值2select ascii('A');3select char(97);--ascii值转换字符4select char(65);5select nchar(65);6select nchar(45231);7select nchar(32993);--unicode转换字符8select unicode('A'), unicode('中');--返回unicode编码值9select soundex('hello'), soundex('world'), soundex('word');10select patindex('%a', 'ta'), patindex('%ac%', 'jack'), patindex('dex%', 'dexjack');--匹配字符索引11select'a'+space(2) +'b', 'c'+space(5) +'d';--输出空格12select charIndex('o', 'hello world');--查找索引13select charIndex('o', 'hello world', 6);--查找索引14select quoteName('abc[]def'), quoteName('123]45');15--精确数字16select str(123.456, 2), str(123.456, 3), str(123.456, 4);17select str(123.456, 9, 2), str(123.456, 9, 3), str(123.456, 6, 1), str(123.456, 9, 6);18select difference('hello', 'helloWorld');--⽐较字符串相同19select difference('hello', 'world');20select difference('hello', 'llo');21select difference('hello', 'hel');22select difference('hello', 'hello');23select replace('abcedef', 'e', 'E');--替换字符串24select stuff('hello world', 3, 4, 'ABC');--指定位置替换字符串25select replicate('abc#', 3);--重复字符串26select subString('abc', 1, 1), subString('abc', 1, 2), subString('hello Wrold', 7, 5);--截取字符串27select len('abc');--返回长度28select reverse('sqlServer');--反转字符串2930select left('leftString', 4);--取左边字符串31select left('leftString', 7);32select right('leftString', 6);--取右边字符串33select right('leftString', 3);34select lower('aBc'), lower('ABC');--⼩写35select upper('aBc'), upper('abc');--⼤写36--去掉左边空格37select ltrim(' abc'), ltrim('# abc#'), ltrim(' abc');38--去掉右边空格39select rtrim(' abc '), rtrim('# abc# '), rtrim('abc');6、安全函数1select current_user;2select user;3select user_id(), user_id('dbo'), user_id('public'), user_id('guest');4select user_name(), user_name(1), user_name(0), user_name(2);5select session_user;6select suser_id('sa');7select suser_sid(), suser_sid('sa'), suser_sid('sysadmin'), suser_sid('serveradmin');8select is_member('dbo'), is_member('public');9select suser_name(), suser_name(1), suser_name(2), suser_name(3);10select suser_sname(), suser_sname(0x01), suser_sname(0x02), suser_sname(0x03);11select is_srvRoleMember('sysadmin'), is_srvRoleMember('serveradmin');12select permissions(object_id('student'));13select system_user;14select schema_id(), schema_id('dbo'), schema_id('guest');15select schema_name(), schema_name(1), schema_name(2), schema_name(3);7、系统函数1select app_name();--当前会话的应⽤程序名称2select cast(2011as datetime), cast('10'as money), cast('0'as varbinary);--类型转换3select convert(datetime, '2011');--类型转换4select coalesce(null, 'a'), coalesce('123', 'a');--返回其参数中第⼀个⾮空表达式5select collationProperty('Traditional_Spanish_CS_AS_KS_WS', 'CodePage');6select current_timestamp;--当前时间戳7select current_user;8select isDate(getDate()), isDate('abc'), isNumeric(1), isNumeric('a');9select dataLength('abc');10select host_id();11select host_name();12select db_name();13select ident_current('student'), ident_current('classes');--返回主键id的最⼤值14select ident_incr('student'), ident_incr('classes');--id的增量值15select ident_seed('student'), ident_seed('classes');16select@@identity;--最后⼀次⾃增的值17select identity(int, 1, 1) as id into tab from student;--将studeng表的烈属,以/1⾃增形式创建⼀个tab 18select*from tab;19select@@rowcount;--影响⾏数20select@@cursor_rows;--返回连接上打开的游标的当前限定⾏的数⽬21select@@error;--T-SQL的错误号22select@@procid;8、配置函数1set datefirst 7;--设置每周的第⼀天,表⽰周⽇2select@@datefirst as'星期的第⼀天', datepart(dw, getDate()) AS'今天是星期';3select@@dbts;--返回当前数据库唯⼀时间戳4set language 'Italian';5select@@langId as'Language ID';--返回语⾔id6select@@language as'Language Name';--返回当前语⾔名称7select@@lock_timeout;--返回当前会话的当前锁定超时设置(毫秒)8select@@max_connections;--返回SQL Server 实例允许同时进⾏的最⼤⽤户连接数9select@@MAX_PRECISION AS'Max Precision';--返回decimal 和numeric 数据类型所⽤的精度级别10select@@SERVERNAME;--SQL Server 的本地服务器的名称11select@@SERVICENAME;--服务名12select@@SPID;--当前会话进程id13select@@textSize;14select@@version;--当前数据库版本信息9、系统统计函数1select@@CONNECTIONS;--连接数2select@@PACK_RECEIVED;3select@@CPU_BUSY;4select@@PACK_SENT;5select@@TIMETICKS;6select@@IDLE;7select@@TOTAL_ERRORS;8select@@IO_BUSY;9select@@TOTAL_READ;--读取磁盘次数10select@@PACKET_ERRORS;--发⽣的⽹络数据包错误数11select@@TOTAL_WRITE;--sqlserver执⾏的磁盘写⼊次数12select patIndex('%soft%', 'microsoft SqlServer');13select patIndex('soft%', 'software SqlServer');14select patIndex('%soft', 'SqlServer microsoft');15select patIndex('%so_gr%', 'Jsonisprogram');10、⽤户⾃定义函数1 # 查看当前数据库所有函数23--查询所有已创建函数4select definition,*from sys.sql_modules m join sys.objects o on m.object_id= o.object_id5and type in('fn', 'if', 'tf');678 # 创建函数910if (object_id('fun_add', 'fn') is not null)11drop function fun_add12go13create function fun_add(@num1int, @num2int)14returns int15with execute as caller16as17begin18declare@result int;19if (@num1is null)20set@num1=0;21if (@num2is null)22set@num2=0;23set@result=@num1+@num2;24return@result;25end26go27调⽤函数28select dbo.fun_add(id, age) from student;2930--⾃定义函数,字符串连接31if (object_id('fun_append', 'fn') is not null)32drop function fun_append33go34create function fun_append(@args nvarchar(1024), @args2nvarchar(1024))35returns nvarchar(2048)36as37begin38return@args+@args2;39end40go4142select dbo.fun_append(name, 'abc') from student;434445 # 修改函数4647alter function fun_append(@args nvarchar(1024), @args2nvarchar(1024))48returns nvarchar(1024)49as50begin51declare@result varchar(1024);52--coalesce返回第⼀个不为null的值53set@args=coalesce(@args, '');54set@args2=coalesce(@args2, '');;55set@result=@args+@args2;56return@result;57end58go5960select dbo.fun_append(name, '#abc') from student;616263 # 返回table类型函数6465--返回table对象函数66select name, object_id, type from sys.objects where type in ('fn', 'if', 'tf') or type like'%f%';6768if (exists (select*from sys.objects where type in ('fn', 'if', 'tf') and name ='fun_find_stuRecord')) 69drop function fun_find_stuRecord70go71create function fun_find_stuRecord(@id int)72returns table73as74return (select*from student where id =@id);75go7677select*from dbo.fun_find_stuRecord(2);。
1.数值处理函数(1)求绝对值函数ABS()【格式】ABS(<数值表达式>)【功能】返回<数值表达式>的绝对值,参数的类型为N型,得到的函数值的类型为N型。
【例如】输入语句:?ABS(-26.2),ABS(26.6),ABS(-50)显示结果:26.2 26.6 50注意:语句? <内存变量>|<常量>|<表达式>是非格式输出语句,具有计算功能。
语句在命令窗口输入。
(2)取整函数INT()【格式】INT(<数值表达式>)【功能】返回<数值表达式>的整数部分。
【例如】输入语句:?INT(26.2),INT(26.9),INT(-26.2),INT(-26.9)显示结果:26 26 -26 -26(3)求四舍五入函数ROUND()【格式】ROUND(<数值表达式1>,<数值表达式2>)【功能】返回<数值表达式1>按<数值表达式2>所指定的保留小数位数进行四舍五入的值。
若<数值表达式2>的值为负,则返回小数点左边为<数值表达式2>绝对值个数零的整数值。
【例如】:输入语句:?ROUND(68.345,2),ROUND(68.745,0),ROUND(68.345,-1),ROUND(68.345,-2)显示结果:68.35 69 70 100注意:在执行函数ROUND(68.345,-1)时,小数点左边的数是两位68,由于参数2为-1,则返回值是整数且应带一个0,故经四舍五入后,8进位到6则首位变为7,第二位按规定是0。
所以该函数的返回值是70。
(4)求平方根SQRT()【格式】SQRT(<数值表达式>)【功能】返回<数值表达式>的平方根。
【说明】<数值表达式>的值必须为正数或零。
【例如】输入语句:?SQRT(25.9),SQRT(8*8),SQRT(ABS(-36))显示结果: 5.09 8.00 6.00(5)求余函数MOD()【格式】MOD(<数值表达式1>,<数值表达式2>)【功能】返回<数值表达式1>除以<数值表达式2>的余数。
sqlserver函数大全一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果。
这些要求包括:执行计算与数学运算、转换数据、解析数值、组合值和聚合一个范围内的值等。
下表给出了T-SQL函数的类别和描述。
函数的组成函数的目标是返回一个值。
大多数函数都返回一个标量值(scalar value),标量值代表一个数据单元或一个简单值。
实际上,函数可以返回任何数据类型,包括表、游标等可返回完整的多行结果集的类型。
本章不准备讨论到这个深度,第12章将讲解如何创建和使用用户自定义函数,以返回更复杂的数据。
函数己经存在很长时间了,它的历史比SQL还要长。
在几乎所有的编程语言中,函数调用的方式都是相同的:Result=Function()在T-SQL中,一般用SELECT语句来返回值。
如果需要从查询中返回一个值,就可以把SELECT当成输出运算符,而不用使用等号:SELECT Function()一个论点对于SQL函数而言,参数表示输入变量或者值的占位符。
函数可以有任意个参数,有些参数是必须的,而有些参数是可选的。
可选参数通常被置于以逗号隔开的参数表的末尾,以便于在函数调用中去除不需要的参数。
在SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示。
在下列的CONVERT()函数例子中,数据类型的length和style参数是可选的:CONVERT (data-type [(length)], expression[,style])可将它简化为如下形式,因为现在不讨论如何使用数据类型:CONVERT(date_type, expression[,style])根据上面的定义,CONVERT()函数可接受2个或3个参数。
因此,下列两个例子都是正确的:这个函数的第一个参数是数据类型Varchar(20),第2个参数是另一个函数GETDATE()。
GETDATE()函数用datetime数据类型将返回当前的系统日期和时间。
第2条语句中的第3个参数决定了日期的样式。
这个例子中的101指以mm/dd/yyyy格式返回日期。
本章后面将详细介绍GETDATE()函数。
即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE()函数。
注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。
确定性函数由于数据库引擎的内部工作机制,SQL Server必须根据所谓的确定性,将函数分成两个不同的组。
这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。
如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。
如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。
例如,GETDATE()函数是非确定性函数,因为它不会两次返回相同的值。
为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。
部分原因是SQL Server缓存与预编译可执行对象的方式。
例如,即席查询可以使用任何函数,不过如果打算构建先进的、可重用的编程对象,理解这种区别很重要。
以下这些函数是确定性的:●∙AVG()(所有的聚合函数都是确定性的)●∙CAST()●∙CONVERT()●∙DATEADD()●∙DATEDIFF()●∙ASCII()●∙CHAR()●∙SUBSTRING()以下这些函数与变量是非确定性的:●∙GETDATE()●∙@@ERROR●∙@@SERVICENAME●∙CURSORSTATUS()●∙RAND()在函数中使用用户变量变量既可用于输入,也可用于输出。
在T-SQL中,用户变量以@符号开头,用于声明为特定的数据类型。
可以使用SET或者SELECT语句给变量赋值。
以下的例子用于将一个int类型的变量@MyNumber传递给SQRT()函数:结果是12,即144的平方根。
用SET给变量赋值以下例子使用另一个int型的变量@MyResult,来捕获该函数的返回值。
这个技术类似于过程式编程语言中的函数调用样式,即把SET语句和一个表达式结合起来,给参数赋值:用SELECT给变量赋值使用SELECT的另一种形式也可以获得同样的结果。
对变量要在赋值前要先声明。
使用SELECT语句来替代SET命令的主要优点是,可以在一个操作内同时给多个变量赋值。
执行下面的SELECT语句,通过SELECT语句赋值的变量就可以用于任何操作了。
上面的例子首先声明了4个变量,然后用两个SELECT语句给这些变量赋值,而不是用4个SELECT语句给变量赋值。
虽然这些技术在功能上是相同的,但是在服务器的资源耗费上,用一个SELECT语句给多个变量赋值一般比用多个SET命令的效率要高。
将一个甚至多个值选进参数的限制是,对变量的赋值不能和数据检索操作同时进行。
这就是上面的例子使用SELECT 语句来填充变量,而用另外一个SELECT语句来检索变量中数据的原因。
例如,下面的脚本就不能工作:这个脚本会产生如下错误:在查询中使用函数函数经常和查询表达式结合使用来修改列值。
这只需将列名作为参数传递给函数即可,随后函数将引用插入到SELECT查询的列的列表中,如下所示:在这个例子中,BirthDate列的值被作为参数传递给YEAR()函数。
函数的结果是别名为BirthYear的列。
嵌套函数我们需要的功能常常不能仅由一个函数来实现。
根据设计,函数应尽量简单,用于提供特定的功能。
如果一个函数要执行许多不同的操作,就变得复杂和难以使用。
因此,每个函数通常仅执行一个操作,要实现所有的功能,可以将一个函数的返回值传递给另一个函数,这称为嵌套函数调用。
以下是一个简单的例子:GETDATE()函数的作用是返回当前的日期与时间,但不能返回经过格式化的数据,因为这是CONVERT()函数的功能。
要想同时使用这两个函数,可以把GETDATE()函数的输出作为CONVERT()函数的输入参数。
聚合函数报表的典型用途是从全部数据中提取出代表一种趋势的值或者汇总值,这就是聚合的意义。
聚合函数回答数据使用者的如下问题:上个月鸡雏的总销售量是多少?19~24岁之间的巴西男性在食品调味品上的平均支出是多少?上季度所有订单中从订购到运输的最长时间是多少?收发室里仍在工作的最老的员工是谁?聚合函数应用特定的聚合操作并返回一个标量值(单一值)。
返回的数据类型对应于该列或者传递到函数中的值。
聚合经常和分组、累积以及透视等表运算一起使用,生成数据分析结果。
第7章将详细介绍这个主题,这里仅讨论简单SELECT查询中的一些常用函数。
聚合函数不仅可用在SELECT查询中,还可以和标量输入值一起使用。
那么,这样做的意义是什么呢?在下列代码中,将值15传递给下列聚合函数,每个函数的返回值都相同:它们都返回15。
虽然,对同一个值求平均、求和、求最小值、求最大值,所得的结果还是那个值。
如果对一个值计数,又会产生什么结果呢?SELECT COUNT(15)得到的值是1,因为函数只计数了一个值。
现在做一些有意义的事。
聚合函数只有在处理结果集合中的一组数据时才有意义。
每个函数都处理某列的非空值。
除非使用分组操作(详见第7章),否则不能在同一个SELECT语句中既返回聚合的值,又返回常规的列值。
AVG()函数AVG()函数用于返回一组数值中所有非空数值的平均值。
例如,表6-2包含了体操成绩。
表6-2对这些数据执行以下查询:SELECT AVG(Score)结果是8.965。
如果有三个女孩没有完成一些项目,在表中没有记录成绩,则可用NULL来表示(见表6-3)。
表6-3脚本:在这种情况下,计算平均值时只考虑实际的数值,NULL不参与运算,结果是8.921429。
但是,如果把缺少的成绩也算在内,即用数值0代替NULL,则会严重影响最终成绩(6.245),她们能不能进入国家级的比赛就难说了。
COUNT()函数COUNT()函数用于返回一个列内所有非空值的个数,这是一个整型值。
比如,在上一个例子中,体操数据被保存在#GymEvent表中,要确定Sammi参加的项目数,则可以执行下列查询:SELECT COUNT(Score)FROM#GymEvent WHERE Player='Sammi'结果是1,因为Sammi只参加了跳马比赛,她的平衡木成绩是NULL。
如果需要确定表中的行数,无论这些行是不是NULL值,都可以使用以下语法:SELECT COUNT(*)FROM#GymEvent以Sammi为例,COUNT(*)查询如下所示:SELECT COUNT(*)FROM#GymEvent WHERE Player='Sammi'由于COUNT(*)函数会忽略NULL值,所以这个查询的结果是2。
MIN()与MAX()函数MIN()函数用于返回一个列范围内的最小非空值;MAX()函数用于返回最大值。
这两个函数可以用于大多数的数据类型,返回的值根据对不同数据类型的排序规则而定。
为了说明这两个函数,假设有一个表包含了两列值,一列是整型值,另一列是字符型值,如表6-4所示。
表6-4脚本:如果分别调用MIN()与MAX()函数将会返回什么值呢?因为VarCharColumn中值的存储类型为字符类型,而不是数字,所以结果以每个字符的ASCII值为顺序从左到右排序。
这就是12比其他值小、而4比其他值大的原因。
SUM()函数SUM()函数是最常用的聚合函数之一,它的功能很容易理解:和AVG()函数一样,它用于数值数据类型,返回一个列范围内所有非空值的总和。
配置变量配置变量不是函数,不过它们的用法和系统函数相同。
每个全局变量都能够返回SQL Server执行环境的标量信息。
以下是一些常见的例子。
@@ERROR变量这个变量包含当前连接发生的最后一次错误的代码。
在执行的语句没有错误时,@@ERROR变量的值是0。
出现标准错误时,错误是由数据库引擎引发的。
所有的标准错误代码与消息都保存在sys.messages系统视图中,可以使用如下脚本查询:SELECT*FROM sys.messages定制错误可以通过调用RAISERROR语句来手动引发,并调用sp_addmessage系统存储过程将其添加到sysmessages表中。
以下是一个@@ERROR变量的简单例子。
先试着将一个数除以0,数据库引擎会引发标准错误号为8134的错误。
注意查看Results选项卡中的查询结果。
在发生错误时,Management Studio的Messages选项卡将默认显示在Results选项卡的上面:在成功检索@@ERROR的值后,@@ERROR的值将返回0,因为@@ERROR只保存了上次执行的语句的错误代码。