SQLServer2005函数大全

合集下载

第11章- 函数-《SQL Server2005程序设计语言》

第11章- 函数-《SQL Server2005程序设计语言》

标量函数
create function fn_new1
9.3.2 标量函数
(@myinput varchar(30))
returns varchar(30) as
begin
if @myinput is null set @myinput='NOT applicable' return @myinput end
declare @input varchar(30) --set @input='HELLO' Select dbo.fn_new1(@input) --或 declare @t1 varchar(30) exec @t1=fn_new1 @myinput=@input select @t1
标量函数
CREATE FUNCTION fn_DateFormat (@indate datetime, @separator char(1)='-') RETURNS Nchar(20) AS BEGIN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator + CONVERT(Nvarchar(20), datepart(dd, @indate)) + @separator + CONVERT(Nvarchar(20), datepart(yy, @indate)) END
9.3.2 标量函数
SQL Server 提供少量内置用户定义函数。与普通内置 函数不同,它们的名字以“ fn_”开头并且使用特定 的调用语法: ::函数名([参数列表]) 其中“::”代替了“架构名”的位置,表明函数为内 置用户定义函数 例:SELECT * FROM ::fn_helpcollations()

SQL Server 2005

SQL Server 2005

1 基本SELECT语句
1.1 投影查询 1.2 条件查询
1.1 投影查询



最基本的 SELECT 语句仅有两个部分:要返回的列,和这些 列源于的表。也就是说查询均为不使用WHERE子句的无条件 查询,也称作投影查询。 例1-1 从读者类型中查询类型,图书册数,期刊册数,续借次数, 限制图书,限制期刊。 程序清单如下: select 类型,图书册数,期刊册数,续借次数,限制图书,限制期刊 from 读者类型 例1-2 查询读者类型中的全部信息。 程序清单如下: select * from 读者类型 注意:用‘ * ’表示表的全部列名,而不必逐一列出。

例1-27 在分组查询中使用HAVING条件,查询平均成 绩大于85的学生学号及平均成绩。 程序清单如下: SELECT sno, AVG(score) AS 'AverageScore' FROM sc GROUP BY sno HAVING AVG(score) >85 GO 注意:如果 HAVING 中包含多个条件,那么这些条件 将通过 AND、OR 或 NOT 组合在一起
2.1 聚合函数和GROUP BY子句
GROUP BY子句可以将查询结果按属性列或属性列组合在行的 方向上进行分组,每组在属性列或属性列组合上具有相同的聚合 值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。常用的聚合函数,如表1-3所示。
表1-3常用的聚合函数

注意:在SELECT语句中可利用“IN”操作来查询属性值属于 指定集合的元组。利用“NOT IN”可以查询指定集合外的元组。 如下面两个例子。 例 查询选修C1或C2的学生的学号、课程号和成绩。 程序清单如下: SELECT SNO, CNO, SCORE FROM SC WHERE CNO IN(„C1‟, „C2‟)

SQLSERVER函数大全

SQLSERVER函数大全

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函数大全

SQL Server函数大全

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'。

SQLSERVER2005四种排名函数

SQLSERVER2005四种排名函数

SQLSERVER 2005版本以上支持四种排名函数,分别为ROW_NUMBER, RANK, DENSE_RANK,NTILE首先构造数据如下:with cte as(select'zhang'as name, 3 as valueunionselect'li'as name, 4 as valueunionselect'cai'as name, 4 as valueunionselect'wang'as name, 5 as value)select name,value from cte结果如下:(题外话: cte 在这里的作用相当于子查询, 有时候进行一些复杂的查询的时候,用cte看起来会更直观方便:例如上面的语句与select ,A.value from (select'zhang'as name, 3 as valueunionselect'li'as name, 4 as valueunionselect'cai'as name, 4 as valueunionselect'wang'as name, 5 as value) A效果是一样的,但是用cte看起来显然结构更加清晰, 要注意的一点是,cte的作用范围只是下一个查询语句,具体就不解释下去了)1.ROW_NUMBER, 看名字就知道是行号,也就是按照一定的排序规则生成序号用法如下:脚本with cte as(select'zhang'as name, 3 as valueunionselect'li'as name, 4 as valueunionselect'cai'as name, 4 as valueunionselect'wang'as name, 5 as value)select name,value,row_number()over(order by value desc)as RowNumber from cte(以下再出现脚本会省略with cte 部分,请自行补上)效果如下:row_number与over语句搭配使用的,必须要有over语句,里面的内容跟order by的使用方式完全一样,除了生成序号之外, row_number还可以用于服务器端分页, 例如以上语句, 做成存储过程,只需要将页码和记录数做成参数对RowNumber列做过滤, 产生如RowNumber>=10 and RowNumber<20的效果, 就可以每次只取出部分结果集, 有兴趣的朋友可以自行研究2.RANK 这个是排名函数, 跟row_number的区别就在于有同名的时候,例如以上例子中,cai和li的值都是4, row_number是按顺序编号,而RANK效果如下:脚本:select name,value,rank()over(order by value desc)as[Rank]from cte 结果:同名记录会占一个顺序位, 所以有两个并列第二的时候,就没有第三,直接到第四了3.DENSE_RANK 与RANK类似,区别在于有同名的时候,不占顺序位,序号是连贯的脚本:select name,value,dense_rank()over(order by value desc)as [dense_rank]from cte效果:4.NTILE 分组, 带一个参数设置要分成几组, 例如将9个人按排序分成高分,中,低分三组,每组3人, 当不均分的时候,排头优先, 例如8个人分3组,那么将会是第三组少一个人,先保证前面的组满员,而7个人的时候,就是第一组3人,后面两组2人了脚本:select name,value,NTILE(2)over(order by value desc)as[NTILE]from cte效果脚本:select name,value,NTILE(3)over(order by value desc)as[NTILE]from cte效果如果分组数量大于或等于记录数, 则效果与ROW_NUMBER一样了。

SQLServer2005数据查询

SQLServer2005数据查询

汇总查询
示例:查询学生的最高分数、最低分数、平均分数及总人数
SELECT MAX(分数) 最高分数, MIN(分数) 最低分数,
AVG(分数) 平均分数,COUNT(*) 总人数 FROM 教学成绩表
数据查询
T-SQL查询 简单查询 条件查询 汇总查询 INTO子句
嵌套查询 ORDER BY子句 GROUP BY子句 COMPUTE 子句 集合操作
ON 学生信息表.学号 =教学成绩表.学号
等 价 于
联接查询
等 价 于
SELECT 教学成绩表.学号,姓名,课程编号,分数 FROM 教学成绩表,学生信息表
WHERE 教学成绩表.学号 = 学生信息表.学号
学生信息表
内联接
教 学 成 绩 表 表
学生信息表
课程信息表
教学成绩表
示例2:查询学生的学号、姓名、课程名称和分数。 SELECT xs.学号,姓名,名称,分数
条件查询
使用IS(NOT)NULL 关键字
示例:查询家庭地址为空行的学生学号,姓名和家庭地址 SELECT 学号,姓名,家庭地址
注意null和空 字符串的区别
FROM 学生信息表
WHERE 家庭地址 IS NULL
示例:查询没有输入家庭地址的学生学号,姓名和家庭地址 SELECT 学号,姓名,家庭地址
示例:查询每个学生的所有公共基础课程名称
SELECT 名称 INTO #公共基础课表 FROM 课程信息表 WHERE 类别='公共基础课' SELECT 姓名,名称
连接查询
小结
INTO子句
INTO 子句:保存查询结果
示例:查询所有女生的信息并将结果保存名为[女生表]的数据表。 SELECT * INTO 女生表

Sql四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

Sql四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

Sql四⼤排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介排名函数是Sql Server2005新增的功能,下⾯简单介绍⼀下他们各⾃的⽤法和区别。

我们新建⼀张Order表并添加⼀些初始数据⽅便我们查看效果。

CREATE TABLE [dbo].[Order]([ID] [int] IDENTITY(1,1) NOT NULL,[UserId] [int] NOT NULL,[TotalPrice] [int] NOT NULL,[SubTime] [datetime] NOT NULL,CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]GOSET IDENTITY_INSERT [dbo].[Order] ONGOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (1, 1, 100, CAST(0x0000A419011D32AF AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (2, 2, 500, CAST(0x0000A419011D40BA AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (3, 3, 300, CAST(0x0000A419011D4641 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (4, 2, 1000, CAST(0x0000A419011D4B72 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (5, 1, 520, CAST(0x0000A419011D50F3 AS DateTime))GOINSERT [dbo].[Order] ([ID], [UserId], [TotalPrice], [SubTime]) VALUES (6, 2, 2000, CAST(0x0000A419011E50C9 AS DateTime))GOSET IDENTITY_INSERT [dbo].[Order] OFFGOALTER TABLE [dbo].[Order] ADD CONSTRAINT [DF_Order_SubTime] DEFAULT (getdate()) FOR [SubTime]GO 附上表结构和初始数据图:⼀、ROW_NUMBER row_number的⽤途的⾮常⼴泛,排序最好⽤他,⼀般可以⽤来实现web程序的分页,他会为查询出来的每⼀⾏记录⽣成⼀个序号,依次排序且不会重复,注意使⽤row_number函数时必须要⽤over⼦句选择对某⼀列进⾏排序才能⽣成序号。

SQLServer新增函数大全(各版本)

SQLServer新增函数大全(各版本)

SQLServer新增函数⼤全(各版本)SQL Server 2017CONCAT_WS ( separator, argument1, argument2 [, argumentN]... ) --采⽤可变数量的字符串⾃变量,并将它们串联(或联接)成单个字符串。

⽤第⼀个参数指定的分隔符分隔连接的字符串值TRANSLATE ( inputString, characters, translations) --在第⼆个参数中指定的某些字符转换为第三个参数中指定的字符⽬标集后,返回作为第⼀个参数提供的字符串SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()'); --结果:2*(3+4)/(7-2)TRIM ( string ) --删除字符串开头和结尾的空格字符 char(32) 或其他指定字符STRING_AGG ( expression, separator ) [ WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] ) ] --串联字符串表达式的值,并在其间放置分隔符值。

不能在字符串末尾添加分隔符SELECT STRING_AGG(CONVERT(NVARCHAR(max), FirstName), CHAR(13)) AS csv FROM Person.Person;--⽣成姓名列表,并将其以回车符分隔,结果中不返回 name 单元格中的 NULL 值SELECT STRING_AGG(CONVERT(NVARCHAR(max), ISNULL(FirstName,'N/A')), ',') AS csv FROM Person.Person;--返回以逗号分隔的姓名,并使⽤“N/A”替换 null 值SQL Server 2016STRING_SPLIT ( string , separator ) --⼀个表值函数,它根据指定的分隔符将字符串拆分为⼦字符串⾏SELECT value FROM STRING_SPLIT('clothing,road,,touring,bike', ',');SELECT ProductId, Name, value FROM Product CROSS APPLY STRING_SPLIT(Tags, ',');STRING_ESCAPE( text , type ) --对⽂本中的特殊字符进⾏转义并返回有转义字符的⽂本SELECT STRING_ESCAPE('\ / \\ " ', 'json') AS escapedText;DATEDIFF_BIG ( datepart , startdate , enddate ) --返回 startdate 与 enddate 之间的 bigint 差异,以 datepart 设置的边界表⽰inputdate AT TIME ZONE timezone --将 inputdate 转换为⽬标时区中相应的 datetimeoffset 值SELECT CONVERT(DATETIME2(0), '2015-03-29T01:01:00', 126) AT TIME ZONE 'Central European Standard Time';--结果:2015-03-29 01:01:00 +01:00COMPRESS ( expression ) --使⽤ GZIP 算法压缩输⼊表达式。

SQL Server 2005的字符串函数

SQL Server 2005的字符串函数

SQL Server 2005的字符串函数简介:下面的一组技巧会演示SQL Server 2005的字符串函数。

字符串函数对T-SQL编程非常有用,能让我们进行字符串清除、ASCII和普通字符之间的转换、模式搜索、移除尾部空格等等。

关键词:下面的一组技巧会演示SQL Server 2005的字符串函数。

字符串函数对T-SQL 编程非常有用,能让我们进行字符串清除、ASCII和普通字符之间的转换、模式搜索、移除尾部空格等等。

表8-3列出了SQL Server 2005中提供的各种字符串函数。

表8-3 字符串函数函数名描述ASCII和CHAR ASCII函数接受字符表达式最左边的字符并返回ASCII码。

CHAR函数把ASCII码的整数值转化为字符值CHARINDEX和PATINDEXCHARINDEX函数用于返回一个字符串在另外一个字符串中的起始位置。

PATINDEX函数和CHARINDEX相似,只是PATINDEX允许在指定要搜索的字符串的时候使用通配符DIFFERENCE和SOUNDEXDIFFERENCE和SOUNDEX都用于计算发音相似的字符串。

SOUNDEX为字符串分配一个4位数字码,DIFFERENCE计算两个独立字符串的SOUNDEX输出的相似级别LEFT和RIGHT LEFT函数返回字符串从左起指定个字符数的一部分字符串。

RIGHT函数和LEFT函数相似,只是返回字符串从右起指定个字符数的一部分字符串LEN和DATALENGTHLEN函数返回字符串表达式的字符个数,不包括最后一个字符后面的任何空格(尾部空格)。

而DATALENGTH返回表达式使用的字节数LOWER和UPPER LOWER函数返回字符表达式的小写形式,UPPER函数返回字符表达式的大写形式LTRIM和RTRIM LTRIM函数移除前导空格,RTRIM函数移除尾部空格NCHAR和UNICODEUNICODE函数返回字符表达式或输入表达式的第一个字符的Unicode整数值。

SQL server常用函数

SQL server常用函数

一、.修改查询出来的字段属性①、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系统函数大全

SQL Server系统函数大全

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个字符的部分。

SQLServer 2005日期函数

SQLServer 2005日期函数

1 SQL Server 有两种日期类型:DATETIME 和 SMALLDATETIME,DATETIME 的日期范围:1753-1-1到9999-12-31之间的日期值,精度为 3.33毫秒,其类型的值在SQLServer内部用两个 4 字节的整数存储。

第一个 4 字节存储“基础日期”(即 1900 年 1 月 1 日)之前或之后的天数。

基础日期是系统参照日期。

另外一个 4 字节存储天的时间(以午夜后经过的毫秒数表示)。

SMALLDATETIME的范围:1900-1-1到2079-6-6之间的日期值,精度为1分钟,其类型的值在SQLServer 内部用两个 2 字节的整数存储。

第一个 2 字节存储 1900 年 1 月 1 日后的天数。

另外一个 2 字节存储午夜后经过的分钟数2 SQL Server 获得当前日期的函数: GETDATE() GETUTCDATE() CURRENT_TIMESTAMPGETDATE(): 返回当前系统日期和时间GETUTCDATE(): 使用 DT_DBTIMESTAMP 格式返回以 UTC 时间(通用协调时间或格林尼治标准时间)表示的系统当前日期CURRENT_TIMESTAMP: 返回当前日期的和时间,等价于GETDATE()函数.注此函数不带括号"()"-------------------------------------------------------------------------------------------------------------------- SELECt GETDATE() AS [GETDATE],CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP],GETUTCDATE() AS [GETUTCDATE] ------ 返回结果:GETDATE CURRENT_TIMESTAMP GETUTCDATE ------ 2008-12-04 18:28:50.437 2008-12-04 18:28:50.437 2008-12-04 10:28:50.437 --------------------------------------------------------------------------------------------------------------------3 SQL Server 日期抽取函数: DATEPART DATENAME DAY MONTH YEARDATENAME: 返回表示指定日期的指定日期部分的字符串语法:DATENAME ( datepart ,date ) 注:datepart 是指定要返回的日期部分的参数DATEPART: 返回表示指定日期的指定日期部分的整数语法: DATEPART ( datepart ,date ) 注:datepart是指定要返回的日期部分的参数DAY: 返回一个整数,表示日期的“日”日期部分语法: DAY(date)MONTH: 返回一个整数,表示日期的“月”日期部门语法:MONTH(date)YEAR: 返回一个整数,表示日期的“年”日期部门语法:YEAR(date)注:DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date) 和 DATEPART(yy, date) 的同义词,DAY、MONTH、YEAR比DATEPART和DATENAME更简洁4 SQL Server 日期的加减函数: DATEDIFF DATEADDDATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数, 语法:DATEDIFF ( datepart , startdate , enddate ) 用 enddate 减去 startdate注:datepart 指定应在日期的哪一部分计算差额的参数,其日期相减时,只关注边界值,例SELECT DATEDIFF(YEAR,'2008-12-31','2009-1-1') 返回 1DATEADD : 返回给指定日期加上一个时间间隔后的新 datetime 值。

sql-server-2005完整篇

sql-server-2005完整篇

1 什么是SQL?SQL 指结构化查询语言SQL 使我们有能力访问数据库SQL 是一种ANSI 的标准计算机语言2 SQL 能做什么?SQL 面向数据库执行查询SQL 可从数据库取回数据SQL 可在数据库中插入新的纪录SQL 可更新数据库中的数据SQL 可从数据库删除记录SQL 可创建新数据库SQL 可在数据库中创建新表SQL 可在数据库中创建存储过程SQL 可在数据库中创建视图SQL 可以设置表、存储过程和视图的权限3SQL 是一种标准- 但是...SQL 是一门ANSI 的标准计算机语言,用来访问和操作数据库系统。

SQL 语句用于取回和更新数据库中的数据。

SQL 可与数据库程序协同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。

不幸地是,存在着很多不同版本的SQL 语言,但是为了与ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

注释:除了SQL 标准之外,大部分SQL 数据库程序都拥有它们自己的私有扩展!在您的网站中使用SQL要创建发布数据库中数据的网站,您需要以下要素:RDBMS 数据库程序(比如MS Access, SQL Server, MySQL)服务器端脚本语言(比如PHP 或ASP)SQLHTML / CSSRDBMSRDBMS 指的是关系型数据库管理系统。

RDBMS 是SQL 的基础,同样也是所有现代数据库系统的基础,比如MS SQL Server, IBM DB2, Oracle, MySQL 以及Microsoft Access。

RDBMS 中的数据存储在被称为表(tables)的数据库对象中。

表是相关的数据项的集合,它由列和行组成。

SQL 语句您需要在数据库上执行的大部分工作都由SQL 语句完成。

SQL Server 2005中的窗口函数

SQL Server 2005中的窗口函数

SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数、移动平均值、以及执行其它计算。

窗口函数功能非常强大,使用起来也十分容易。

可以使用这个技巧立即得到大量统计值。

窗口是用户指定的一组行。

开窗函数计算从窗口派生的结果集中各行的值。

2.适用范围:排名开窗函数和聚合开窗函数.也就是说窗口函数是结合排名开窗函数或者聚合开窗函数一起使用OVER子句前面必须是排名函数或者是聚合函数3.例题:--建立订单表create table SalesOrder(OrderID int, --订单idOrderQty decimal(18,2) --数量)go--插入数据insert into SalesOrderselect1,2.0union allselect1,1.0union allselect1,3.0union allselect2,6.0union allunion allselect3,8.0union allselect3,1.1union allselect3,7.0go--查询得如下结果select*from SalesOrdergoOrderID OrderQty----------- ------------1 2.001 1.001 3.002 6.002 1.1038.003 1.1037.00现要求显示汇总总数,每当所占比例,分组汇总数,每单在各组所占比例,要求格式如下:OrderID OrderQty 汇总每单比例分组汇总每单在各组比例1 2.00 29.20 0.0685 6.00 0.33331 1.00 29.20 0.0342 6.00 0.16671 3.00 29.20 0.1027 6.00 0.50002 6.00 29.20 0.2055 7.10 0.84512 1.10 29.20 0.0377 7.10 0.15493 8.00 29.20 0.2740 16.10 0.49693 1.10 29.20 0.0377 16.10 0.06833 7.00 29.20 0.2397 16.10 0.4348--利用窗口函数和聚合开窗函数,可以很快实现上述要求select OrderID,OrderQty,sum(OrderQty) over() as[汇总],convert(decimal(18,4), OrderQty/sum(OrderQty) over() ) as[每单所占比例],sum(OrderQty) over(PARTITION BY OrderID) as[分组汇总],convert(decimal(18,4),OrderQty/sum(OrderQty) over(PARTITION BY OrderID)) as[每单在各组所占比例]from SalesOrderorder by OrderID窗口函数是sql2005新增加的,下面我们看看在sql2000里面怎么实现上述的结果:sql2000的实现步骤较麻烦,先计算出总数,再分组计算汇总,最后连接得到结果--sql2000declare@sum decimal(18,2)select@sum=sum(OrderQty)from SalesOrder--按OrderID,计算每组的总计,然后插入临时表select OrderID,sum(OrderQty) as suinto #tfrom SalesOrdergroup by OrderID--连接临时表,得到结果select s.OrderID,s.OrderQty,@sum as[汇总],convert(decimal(18,4),s.OrderQty/@sum) as[每单所占比例],t.su as[分组汇总],convert(decimal(18,4),s.OrderQty/t.su) as[每单在各组所占比例]from SalesOrder s join #t ton t.OrderID=s.OrderIDorder by s.OrderIDdrop table #tgo上面演示的都是窗口函数与聚合开窗函数的使用,它与排名开窗函数请看下面例题:--与排名开窗函数使用select OrderID,OrderQty,rank() over(PARTITION BY orderid order by OrderQty ) as[分组排名],rank() over(order by OrderQty ) as[排名]from SalesOrderorder by orderid asc--查询得如下结果OrderID OrderQty 分组排名排名1 2.00241 3.00351 1.00112 1.1012 2 6.002637.002738.0038 3 1.1012。

sqlserver2005 concat函数

sqlserver2005 concat函数

SQL Server 2005是微软推出的一款关系型数据库管理系统,该系统具有强大的功能和灵活的操作方式,在业界被广泛应用。

其中,concat函数是SQL Server 2005中十分重要的一个函数,它可以用于将多个字符串连接成一个字符串,为数据库操作提供了很大的便利。

在本文中,我们将深入探讨SQL Server 2005中concat函数的用法和实际应用。

一、concat函数的基本语法和功能在SQL Server 2005中,concat函数的基本语法如下:```CONCAT ( string_value1, string_value2 [, string_valueN ] )```其中,string_value1、string_value2等为要连接的字符串参数。

concat函数的功能是将这些字符串参数按顺序连接成一个新的字符串并返回。

二、concat函数的使用方法1. 基本用法```sqlSELECT CONCAT('Hello', ' ', 'World') AS ConcatenatedString;```通过以上示例可以看出,concat函数将参数中的字符串依次连接起来,生成新的字符串并返回。

2. 拼接表中的字段在实际的数据库操作中,我们常常需要对表中的字段进行拼接,concat函数也可以很好地满足这一需求。

```sqlSELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Users;```以上示例中,我们将Users表中的FirstName和LastName字段连接起来,生成新的FullName字段并返回。

3. 处理空值在实际操作中,表中的字段可能存在空值,为了避免出现结果中的空格和其他字符混在一起的情况,可以使用ISNULL函数处理空值。

```sqlSELECT CONCAT(ISNULL(FirstName, ''), ' ', ISNULL(LastName, '')) AS FullName FROM Users;```通过以上示例,我们对FirstName和LastName字段进行了空值处理,避免了结果中出现不必要的空格。

SQLServer常用函数总结

SQLServer常用函数总结

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 。

SQL Server 2005_函数整理

SQL Server 2005_函数整理

重要知识点:1.模糊查询关键字:like的用法。

Like 后面主要有4种通配符,需要知道具体的通配符所表示的意义。

具体如下:(1)%:匹配包含0个或多个的字符串(2)_ :匹配任何单个字符(3)[] :匹配任何在范围或集合之内的单个字符,如:[1-3]只匹配1、2、3(4)[^]:匹配任何不在范围内或集合内的单个字符,如[^1-3]匹配除1、2、3之外的其他字符2.取模计算(%)。

在数学计算是可能会用到。

主要是取两个数相除的余数。

(需要了解一下)如:select 89/16,89%16 前一个结果是5 后一个是9。

函数整理注意,如果需要更多的例子,可以在SQL自带的联机帮助文档中查找,里面的内容很丰富。

基本上所有的函数都有相关的例子进行解释。

一、重要的函数,需要掌握(共列取21个函数)1、聚合函数聚合函数对一组值执行计算,并返回单个值。

除了COUNT 以外,聚合函数都会忽略空值。

聚合函数经常与SELECT 语句的GROUP BY 子句一起使用。

聚合函数的常用使用格式:函数名([all|distinct] 表达式)all:默认值,对所有的值进行聚合函数运算包含重复值。

distinct: 消除重复值后进行聚合函数运算。

2、字符串函数3、日期和时间函数(指定要返回新值的日期的组成部分。

下表列出了Microsoft SQL Server 2005 可识别的日期部分及其缩写。

)红色是一定要知道的,在写日期部分的时候如果是不清楚缩写那可以写全称的4、数学函数:5、数据类型转换函数日期类型数据转换为字符数据类型的日期格式的部分样式表。

下面列取的是几个比较常用的日期格式,其中108,112和120这三种用的比较多需要掌握。

下面是convert 函数用到的部分样式。

6、isnull()重要,需要理解二、需要了解的一些函数。

排名函数排名函数的常用使用格式:函数名() over (order by 列名 [asc|desc][,列名……]) 其中row_number需要了解,其他两个只需要知道就可以字符串函数日期和时间函数数学函数三、只要知道有相应的函数,到使用时可以查找相关的资料的函数,可以稍作了解字符串函数日期和时间函数数学函数当两个不同数据类型的表达式用运算符组合后,数据类型优先级规则指定将优先级较低的数据类型优先转换为优先级较高的数据类型。

sql server 2005 函数分类

sql server 2005 函数分类
italics 方法 将 HTML的 <I> 标识添加到 String 对象中的文本两端。
item 方法 返回集合中的当前项。
join 方法 返回一个由数组中的所有元素连接在一起的 String 对象。
lastIndexOf 方法 返回在 String 对象中子字符串最后出现的位置。
parseInt 方法 返回从字符串转换而来的整数。
pow 方法 返回一个指定幂次的底表达式的值。
2.字符串函数
atEnd 方法 返回一个表明枚举算子是否处于集合结束处的 Boolean 值。
big 方法 在String 对象的文本两端加入 HTML 的<BIG>标识。
blink 方法 将 HTML 的 <BLINK> 标识添加到 String 对象中的文本两端。
bold 方法 将 HTML 的 <B> 标识添加到String 对象中的文本两端。
ceil 方法 返回大于或等于其数值参数的最小整数。
charAt 方法 返回位于指定索引位置的字符。
charCodeAt 方法 返回指定字符的 Unicode 编码。
compile 方法 将一个正则表达式编译为内部格式。
getVarDate 方法 返回 Date 对象中的 VT_DATE。
getYear 方法 返回 Date 对象中的年份。
isFinite 方法 返回一个 Boolean 值,表明某个给定的数是否是有穷的。
isNaN 方法 返回一个 Boolean 值,表明某个值是否为保留值 NaN (不是一个数)。
setYear 方法 使用 Date 对象的年份。
toGMTString 方法 返回一个转换为使用格林威治标准时间(GMT)的字符串的日期。

关于SQLServer的所有函数(对工作或学习也很有帮助)

关于SQLServer的所有函数(对工作或学习也很有帮助)

关于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);。

sqlserver函数大全

sqlserver函数大全

sqlserver函数⼤全原⽂:SQL2008 表达式:是常量、变量、列或函数等与运算符的任意组合。

https:///database/201801/712174.html⼀旦成功地从表中检索出数据,就需要进⼀步操纵这些数据,以获得有⽤或有意义的结果。

这些要求包括:执⾏计算与数学运算、转换数据、解析数值、组合值和聚合⼀个范围内的值等。

下表给出了T-SQL函数的类别和描述。

函数类别作⽤聚合函数执⾏的操作是将多个值合并为⼀个值。

例如 COUNT、SUM、MIN 和 MAX。

配置函数是⼀种标量函数,可返回有关配置设置的信息。

转换函数将值从⼀种数据类型转换为另⼀种。

加密函数⽀持加密、解密、数字签名和数字签名验证。

游标函数返回有关游标状态的信息。

⽇期和时间函数可以更改⽇期和时间的值。

数学函数执⾏三⾓、⼏何和其他数字运算。

元数据函数返回数据库和数据库对象的属性信息。

排名函数是⼀种⾮确定性函数,可以返回分区中每⼀⾏的排名值。

⾏集函数返回可在 Transact-SQL 语句中表引⽤所在位置使⽤的⾏集。

安全函数返回有关⽤户和⾓⾊的信息。

字符串函数可更改 char、varchar、nchar、nvarchar、binary 和 varbinary 的值。

系统函数对系统级的各种选项和对象进⾏操作或报告。

系统统计函数返回有关 SQL Server 性能的信息。

⽂本和图像函数可更改 text 和 image 的值。

函数的组成函数的⽬标是返回⼀个值。

⼤多数函数都返回⼀个标量值(scalar value),标量值代表⼀个数据单元或⼀个简单值。

实际上,函数可以返回任何数据类型,包括表、游标等可返回完整的多⾏结果集的类型。

本章不准备讨论到这个深度,第12章将讲解如何创建和使⽤⽤户⾃定义函数,以返回更复杂的数据。

函数⼰经存在很长时间了,它的历史⽐SQL还要长。

在⼏乎所有的编程语⾔中,函数调⽤的⽅式都是相同的:Result=Function()在T-SQL中,⼀般⽤SELECT语句来返回值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server 2005 函数大全字符串函数 (2)日期和时间函数 (3)日期部分 (5)数学函数 (6)数据类型转换函数 (7)日期类型数据转换为字符数据类型的日期格式的部分样式表 (8)系统函数 (11)排名函数 (11)聚合函数 (12)字符串函数表达式:是常量、变量、列或函数等与运算符的任意组合。

以下参数中表达式类型是指表达式经运算后返回的值的类型函数名称参数示例说明ascii (字符串表达式) select ascii('abc') 返回 97返回字符串中最左侧的字符的ASCII码。

char(整数表达式) select char(100) 返回 d把ASCII 码转换为字符。

介于0 和255 之间的整数。

如果该整数表达式不在此范围内,将返回NULL 值。

charindex (字符串表达式1,字符串表达式2[,整数表达式])select charindex('ab','BCabTabD')返回3select charindex('ab','BCabTabD',4)返回6在字符串2中查找字符串1,如果存在返回第一个匹配的位置,如果不存在返回0。

如果字符串1和字符串2中有一个是null则返回null。

可以指定在字符串2中查找的起始位置。

difference (字符串表达式1,字符串表达式2) select difference('Green','Greene')返回4返回一个0到4的整数值,指示两个字符表达式的之间的相似程度。

0 表示几乎不同或完全不同,4表示几乎相同或完全相同。

注意相似并不代表相等left (字符串表达式,整数表达式) select left('abcdefg',2) 返回 ab返回字符串中从左边开始指定个数的字符。

right (字符串表达式,整数表达式) select right('abcdefg',2) 返回fg返回字符串中从右边开始指定个数的字符。

len(字符串表达式) select len('abcdefg')返回 7select len('abcdefg ') 返回7返回指定字符串表达式的字符数,其中不包含尾随空格。

lower (字符串表达式) select lower('ABCDEF')返回 abcdef返回大写字符数据转换为小写的字符表达式。

upper (字符串表达式) select upper('abcdef')返回 ABCDEF返回小写字符数据转换为大写的字符表达式。

ltrim (字符串表达式) select ltrim(' abc')返回 abc返回删除了前导空格之后的字符表达式。

rtrim(字符串表达式) select rtrim('abc ')返回 abc返回删除了尾随空格之后的字符表达式。

patindex (字符串表达式1,字符串表达式2) select patindex('%ab%','123ab456')返回4select patindex('ab%','123ab456')返回0select patindex('___ab%','123ab456')返回1select patindex('___ab_','123ab456')返回0在字符串表达式1中可以使用通配符,此字符串的第一个字符和最后一个字符通常是%。

%表示任意多个字符,_表示任意字符返回字符串表达式2中字符串表达式1所指定模式第一次出现的起始位置。

没有找到返回0reverse (字符串表达式) select reverse('abcde')返回 edcba返回指定字符串反转后的新字符串space (整数表达式) select'a'+space(2)+'b' 返回 a b返回由指定数目的空格组成的字符串。

str (float型小数[,总长度[,小数点后保留的位数]])select str(123.451)返回 123(123前面有空格)select str(123.451,3)返回123select str(123.451,7,3)返回123.451select str(123.451,7,1)返回123.5select str(123.451,5,3)返回123.5select str(123.651,2)返回**返回由数字转换成的字符串。

返回字符数不到总长度的前面补空格,超过总长度的截断小数位。

如果需要截断整数位则返回**。

注意在截断时遵循四舍五入总长度。

它包括小数点、符号、数字以及空格。

默认值为10。

小数点后最多保留16位。

默认不保留小数点后面的数字stuff (字符串表达式1,开始位置,长度,字符串表达式2)select stuff('abcdef',2,2,'123')返回 a123def在字符串表达式1中在指定的开始位置删除指定长度的字符,并在指定的开始位置处插入字符串表达式2。

返回新字符串substring(字符串表达式,开始位置,长度) select substring('abcdef',2,2)返回bc返回子字符串replace (字符串表达式1,字符串表达式2,字符串表达式3)selectreplace('abcttabchhabc','abc','123')返回 123tt123hh123用字符串表达式3替换字符串表达式1中出现的所有字符串表达式2的匹配项。

返回新的字符串日期和时间函数函数名称参数示例说明dateadd (日期部分,数字,日期) select dateadd(year,45,'1990-12-11')返回 2035-12-11 00:00:00.000select dateadd(month,45,'1990-12-11')返回1994-09-11 00:00:00.000select dateadd(mm,45,'1990-12-11')返回1994-09-11 00:00:00.000select dateadd(qq,12,'1990-12-11')返回给指定日期加上一个时间间隔后的新的日期值。

数字:用于与指定的日期部分相加的值。

如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。

日期:指定的原日期在此函数中dw,dy,dd效果一样都表示天返回1993-12-11 00:00:00.000select dateadd(hh,12,'1990-12-11') 返回1990-12-11 12:00:00.000select dateadd(yy,-12,'1990-12-11') 返回1978-12-11 00:00:00.000datediff (日期部分,开始日期,结束日期) selectdatediff(yy,'1990-12-11','2008-9-10')返回 18selectdatediff(mm,'2007-12-11','2008-9-10')返回 9返回两个指定日期的指定日期部分的差的整数值。

在计算时由结束日期减去开始日期在此函数中dw,dy,dd效果一样都表示天datename (日期部分,日期) select datename(mm,'2007-12-11')返回12select datename(dw,'2007-12-11')返回星期二select datename(dd,'2007-12-11')返回11返回表示指定日期的指定日期部分的字符串。

dw表示一星期中星期几,wk表示一年中的第几个星期dy表示一年中的第几天datepart (日期部分,日期) select datepart(mm,'2007-12-11')返回12select datepart(dw,'2007-12-11')返回3select datepart(dd,'2007-12-11')返回11返回表示指定日期的指定日期部分的整数。

wk表示一年中的第几个星期dy表示一年中的第几天,dw表示一星期中星期几,返回整数默认1为星期天getdate 无参数select getdate()返回2009-04-28 18:57:24.153返回当前系统日期和时间。

day (日期) select day('2007-12-11')返回11返回一个整数,表示指定日期的天的部分。

等价于datepart(dd, 日期)month (日期) select month('2007-12-11')返回12返回一个整数,表示指定日期的月的部分。

等价于datepart(mm, 日期)year (日期) select year('2007-12-11')返回2007返回一个整数,表示指定日期的年的部分。

等价于datepart(yy, 日期)getutcdate 无参数select getutcdate()返回2009-04-28 10:57:24.153返回表示当前的UTC(世界标准时间)时间。

即格林尼治时间(GMT)日期部分(指定要返回新值的日期的组成部分。

下表列出了Microsoft SQL Server 2005 可识别的日期部分及其缩写。

)日期部分含义缩写year 年yy, yyyyquarter 季qq, qmonth 月mm, mdayofyear 天(请看函数中的说明)dy, yday 天(请看函数中的说明)dd, dweek 星期wk, wwweekday 天(请看函数中的说明)dw, whour 小时hhminute 分钟mi, nsecond 秒ss, smillisecond 毫秒ms好用的例子:6.1计算一个月第一天的SQL 脚本:SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)6.2一年的第一天的SQL 脚本:SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)6.3本周的星期一的SQL 脚本:SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)6.4 季度的第一天的SQL 脚本:SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)6.5当天的半夜的SQL 脚本:SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)6.6上个月的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))6.7去年的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))6.8本月的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))6.9本年的最后一天的SQL 脚本:SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))6.10本月的第一个星期一的SQL 脚本:select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)数学函数函数名称参数示例说明abs (数值表达式) select abs(-23.4)返回23.4 返回指定数值表达式的绝对值(正值)pi 无参数select pi()返回3.14159265358979返回π的值cos (浮点表达式) select cos(pi()/3)返回0.5返回指定弧度的余弦值sin (浮点表达式) select sin(pi()/6)返回0.5返回指定弧度的正弦值cot (浮点表达式) select cot(pi()/4)返回1 返回指定弧度的余切值tan (浮点表达式) select tan(pi()/4)返回1返回指定弧度的正切值acos (浮点表达式) select acos(0.5)返回1.0471975511966返回其余弦是所指定的数值表达式的弧度,求反余弦asin (浮点表达式) select asin(0.5)返回 0.523598775598299返回其正弦是所指定的数值表达式的弧度,求反正弦atan (浮点表达式) select atan(1)返回0.785398163397448返回其正切是所指定的数值表达式的弧度,求反正切degrees (数值表达式) select degrees(pi()/4) 返回45返回以弧度指定的角的相应角度。

相关文档
最新文档