Oracle与Sql Server函数对照

Oracle与Sql Server函数对照
Oracle与Sql Server函数对照

下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:

数 Oracle

SQL Server

把字符转换为ASCII : ASCII ASCII

字串连接: CONCAT (expression + expression)

把ASCII转换为字符CHR CHAR

返回字符串中的开始字符(左起)INSTR CH ARINDEX

把字符转换为小写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

日期相加 (date column +/- value) or ADD_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

数字转换为字符TO_CHAR CONVERT

字符转换为数字TO_NUMBER CONVERT

日期转换为字符 TO_CHAR CONVERT

字符转换为日期TO_DATE CONVERT

16进制转换为2进制HEX_TO_RAW CONVERT

2进制转换为16进制 RAW_TO_HEX CONVERT

用户登录账号ID数字UID SUSER_ID

用户登录名USER SUSER_NAME

用户数据库ID数字UID USER_ID

用户数据库名USER

USER_NAME

当前用户CURRENT_USER

CURRENT_USER

在CONNECT BY子句中的级别 LEVEL N/A

Average AVG AVG

Count COUNT COUNT

Maximum MAX

MAX

Minimum MIN

MIN

Summation SUM SUM

Variance VARIANCE

VAR or VARP

特殊的几种:

1..字串连接

Oracle使用两个管道符号(||)来作为字串连接操作符,SQL Server则使用加号(+)。Oracle:

SELECT FNAME||' '||LNAME AS NAME

FROM STUDENT_ADMIN.STUDENT;

Microsoft SQL:

SELECT FNAME +' '+ LNAME AS NAME

FROM STUDENT_ADMIN.STUDENT

2.流控制(Control-of-Flow)

流控制语言控制SQL语句执行流,语句块以及存储过程。PL/SQL和Transact-SQL提供了多数相同的结构,但是还是有一些语法差别。

关键字

这是两个RDBMS支持的关键字。

语句Oracle PL/SQL :

声明变量DECLARE DECLARE

语句块BEGIN...END; BEGIN...END

条件处理IF…THEN,

ELSIF…THEN,

ELSE

ENDIF;

--------------------------------------------------------

Microsoft SQL Server Transact-SQL:

IF…[BEGIN…END]

ELSE

[BEGIN…END]

ELSE IF

CASE expression

无条件结束RETURN RETURN

无条件结束当前程序块后面的语句EXIT BRE AK

重新开始一个WHILE循环 N/A

CONTINUE

等待指定间隔 N/A (dbms_lock.sleep) WAITFOR

循环控制 WHILE LOOP END LOOP

3. 程序注释/* … */, /* … */,

4. 声明变量

Transact-SQL和PL/SQL的变量是用DECLARE关键字创建的。Transact-SQL变量用@标记,并且就像PL/SQL一样,在第一次创建时,用空值初始化。

Oracle :

DECLARE

VSSN CHAR(9);

VFNAME VARCHAR2(12);

VLNAME VARCHAR2(20);

VBIRTH_DATE DATE;

VLOAN_AMOUNT NUMBER(12,2);

-----------------------------------------

Microsoft SQL:

DECLARE

@VSSN CHAR(9),

@VFNAME VARCHAR2(12),

@VLNAME VARCHAR2(20),

@VBIRTH_DATE DATETIME,

@VLOAN_AMOUNT NUMERIC(12,2)

Transact-SQL不支持%TYPE和%ROWTYPE变量数据类型定义。一个Transact-SQL变量不能在DECLARE命令中初始化。

在Microsoft SQL Server数据类型定义中也不能使用Oracle的NOT NULL 和CONSTANT关键字。

像Oracle的LONG和LONG RAW数据类型一样。文本和图形数据类型不能被用做变量定义。

此外,Transact-SQL不支持PL/SQL风格的记录和表的定义。

5. 给变量赋值

Oracle和Microsoft SQL Server提供了下列方法来为本地变量赋值。Oracle Microsoft SQL

Assignment operator (:=) ---------------------SET @local_variable = value

SELECT...INTO syntax for selecting column values from a single row -------------------------

SELECT @local_va riable = expression [FROM…] for assigning a literal value,

an expression involving other local variables, or a column value from a single row

FETCH…INTO syntax------------------------------- FETCH…INTO syntax

这里有一些语法示例

Oracle:

DECLARE VSSN CHAR(9);

VFNAME VARCHAR2(12);

VLNAME VARCHAR2(20);

BEGIN

VSSN := ?';

SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN;

END;

/

------------------------------------------------------------------------------

Microsoft SQL:

DECLARE @VSSN CHAR(9),

@VFNAME VARCHAR(12),

@VLNAME VARCHAR(20)

SET @VSSN = ?'

SELECT @VFNAME=FNAME, @VLNAME=LNAME FROM STUDENTS WHERE SSN = @VSSN

6. 语句块

Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块。

Transact- SQL不需要在DECLARE语句后使用一个语句块。

---------------------------------------------------------------------------------

- 如果在Microsoft SQL Server

中的IF语句和WHILE循环中有多于一个语句被执行,则需要使用BEGIN…END语句块。

Oracle: Microsoft SQL:

DECLARE

DECLARE VARIABLES ...

BEGIN -- THIS IS REQUIRED SYNTAX

PROGRAM_STATEMENTS ...

IF ...THEN

STATEMENT1;

STATEMENT2;

STATEMENTN;

END IF;

WHILE ... LOOP

STATEMENT1;

STATEMENT2;

STATEMENTN;

END LOOP;

END; -- THIS IS REQUIRED SYNTAX DECLARE

DECLARE VARIABLES ...

BEGIN -- THIS IS OPTIONAL SYNTAX

PROGRAM_STATEMENTS ...

IF ...

BEGIN

STATEMENT1

STATEMENT2

STATEMENTN

END

WHILE ...

BEGIN

STATEMENT1

STATEMENT2

STATEMENTN

END

END -- THIS IS REQUIRED SYNTAX

7. 条件处理

Microsoft SQL Server Transact-SQL的条件语句包括IF和ELSE,但不包括Oracle PL/SQL中的ELSEIF语句。

可以用嵌套多重IF语句来到达同样的效果。对于广泛的条件测试,用CASE表达式也许更容易和可读一些。

Oracle Microsoft SQL

DECLARE

VDEGREE_PROGRAM CHAR(1);

VDEGREE_PROGRAM_NAME VARCHAR2(20);

BEGIN

VDEGREE_PROGRAM := 'U';

IF VDEGREE_PROGRAM = 'U' THEN VDEGREE_PROGRAM_NAME := 'Undergraduate';

ELSIF VDEGREE_PROGRAM = 'M' THEN VDEGREE_PROGRAM_NAME := 'Masters';

ELSIF VDEGREE_PROGRAM = 'P' THEN VDEGREE_PROGRAM_NAME := 'PhD';

ELSE VDEGREE_PROGRAM_NAME := 'Unknown';

END IF;

END;

/

-----------------------------------------------------

DECLARE

@VDEGREE_PROGRAM CHAR(1),

@VDEGREE_PROGRAM_NAME VARCHAR(20)

set @VDEGREE_PROGRAM = 'U'

SELECT @VDEGREE_PROGRAM_NAME =

CASE @VDEGREE_PROGRAM

WHEN 'U' THEN 'Undergraduate'

WHEN 'M' THEN 'Masters'

WHEN 'P' THEN 'PhD'.

ELSE 'Unknown'

END

8. 重复执行语句(循环)

Oracle PL/SQL提供了无条件的LOOP和FOR LOOP。Transact-SQL则提供了WHILE循环和GOTO语句。

WHILE Boolean_expression

{sql_statement | statement_block}

[BREAK] [CONTINUE]

WHILE循环需要测试一个布尔表达式来决定一个或者多个语句的重复执行。

只要给定的表达式结果为真,这个(些)语句就一直重复执行下去。如果有多个语句需要执行,则这些语句必须放在一个BEGIN…END块中。

Oracle:

DECLARE

COUNTER NUMBER;

BEGIN

COUNTER := 0;

WHILE (COUNTER <5) LOOP

COUNTER := COUNTER + 1;

END LOOP

END;

/

------------------------------------------------------

Microsoft SQL:

DECLARE

@COUNTER NUMERIC

SELECT @COUNTER = 1

WHILE (@COUNTER <5)

BEGIN

SELECT @COUNTER =

@COUNTER +1

END

语句的执行可以在循环的内部用BREAK和CONTINUE关键字控制。BREAK 关键字使WHILE循环无条件的结束,

而CONTINUE关键字使WHILE循环跳过后面的语句重新开始。BREAK关键字同Oracle PL/SQL中的EXIT关键字是等价的。

而在Oracle中没有和CONTINUE等价的关键字

9. GOTO语句

Oracle和Microsoft SQL Server都有GOTO语句,但是语法不同。GOTO 语句使Transact-SQL跳到指定的标号处运行,

在GOTO语句后指定标号之间的任何语句都不会被执行。

Oracle Microsoft SQL

GOTO label;

<

10. PRINT语句

Transact-SQL的PRINT语句执行同PL/SQL的RDBMS_OUTPUT.put_line 过程同样的操作。该语句用来打印用户给定的消息。

用PRINT语句打印的消息上限是8,000个字符。定义为char或者varchar 数据类型的变量可以嵌入打印语句。

如果使用其它数据类型的变量,则必须使用CONVERT或者CAST函数。本地变量、全局变量可以被打印。可以用单引号或者双引号来封闭文本。

11. 从存储过程返回

Microsoft SQL Server和Oracle都有RETURN语句。RETURN使你的程序从查询或者过程中无条件的跳出。RETURN是立即的、

完全的、并且可以用于从过程、批处理或者语句块的任意部分跳出。在REUTRN 后面的语句将不会被执行。

Oracle Microsoft SQL

RETURN expression: RETURN [integer_expression]

引发程序错误(Raising program errors)

Transact-SQL的RAISERROR返回一个用户定义的错误消息,并且设置一个系统标志来记录发生了一个错误。

这个功能同PL/SQL的raise_application_error异常处理器的功能是相似的。RAISERROR语句允许客户重新取得sysmessages表的一个入口,或者用用户指定的严重性和状态信息动态的建立一条消息。

在被定义后,消息被送回客户端作为系统错误消息。

RAISERROR ({msg_id | msg_str}, severity, state

[, argument1 [, argument2>)

[WITH options]

在转换你的PL/SQL程序时,也许用不着使用RAISERROR语句。在下面的示例代码中。

PL/SQL程序使用raise_application_error异常处理器,但是Transact-SQL 程序则什么也没用。

包括raise_application_error异常处理器是为了防止PL/SQL返回不明确的未经处理的异常错误消息。

作为代替,当一个不可预见的问题发生的时候,异常处理器总是返回Oracle错误消息。

当一个Transact-SQL失败时,它总是返回一个详细的错误消息给客户程序。因此,除非需要某些特定的错误处理,

一般是不需要RAISERROR语句的。

Oracle Microsoft SQL

CREATE OR REPLACE FUNCTION

DEPT_ADMIN.DELETE_DEPT

(VDEPT IN VARCHAR2) RETURN NUMBER AS

BEGIN

DELETE FROM DEPT_ADMIN.DEPT

WHERE DEPT = VDEPT;

RETURN(SQL%ROWCOUNT);

EXCEPTION

WHEN OTHER THEN

RAISE_APPLICATION_ERROR

(-20001,SQLERRM);

END DELETE_DEPT;

------------------------------------------------------

/ CREATE PROCEDURE

DEPT_ADMIN.DELETE_DEPT

@VDEPT VARCHAR(4) AS

DELETE FROM DEPT_DB.DBO.DEPT

WHERE DEPT = @VDEPT

RETURN @@ROWCOUNT

GO

12. 实现游标

Oracle在使用SELECT语句时总是需要游标,不管从数据库中请求多少行。在Microsoft SQL Server,

SELECT 语句并不把在返回客户的行上附加游标作为缺省的结果集合。这是一种返回数据给客户应用程序的有效的方法。

SQL Server为游标函数提供了两种接口。当在Transact-SQL批处理或者存储过程中使用游标的时候,SQL语句可用来声明、

打开、和从游标中抽取,就像定位更新和删除一样。当使用来自DB-Library、ODBC、或者OLEDB程序的游标时,SQL Server

显式的调用内建的服务器函数来更有效的处理游标。

当从Oracle输入一个PL/SQL过程时,首先判断是否需要在Transact-SQL 中采用游标来实现同样的功能。如果游标仅仅返回一

组行给客户程序,就使用非游标的SELECT语句来返回缺省的结果集合。如果游标用来从行中一次取得一个数据给本地过程变量,

你就必须在Transact-SQL中使用游标。

语法

下表显示了使用游标的语法。

操作Oracle Microsoft SQL Server

声明一个游标CURSOR cursor_name [(cursor_parameter(s))]

IS select_statement;

----------------------------------------------------

DECLARE cursor_name CURSOR

[LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]

[TYPE_WARNING]

FOR select_statement

[FOR UPDATE [OF column_name [,…n>]

打开一个游标OPEN cursor_name [(cursor_parameter(s))];

----------------

OPEN cursor_name

从游标中提取(Fetching)FETCH cursor_name INTO variable(s)

-------------------------------------------------------------------------------------------

FETCH FROM] cursor_name

[INTO @variable(s)]

更新提取行UPDATE table_name

SET statement(s)…

WHERE CURRENT OF cursor_name; UPDATE table_name

SET statement(s)…

WHERE CURRENT OF cursor_name

删除提取行DELETE FROM table_name

WHERE CURRENT OF cursor_name; DELETE FROM table_name WHERE CURRENT OF cursor_name

关闭游标CLOSE cursor_name; CLOSE cursor_name

清除游标数据结构N/A DEALLOCATE cursor_name

声明一个游标

尽管Transact-SQL DECLARE CURSOR语句不支持游标参数的使用,但它确实支持本地变量。当游标打开的时候,

它就使用这些本地变量的值。Microsoft SQL Server在其DECLARE CURSOR 中提供了许多附加的功能。

INSENSITIVE选项用来定义一个创建数据的临时拷贝以被游标使用的游标。游标的所有请求都由这个临时表来应答。因此

对原表的修改不会反映到那些由fetch返回的用于该游标的数据上。这种类型的游标访问的数据是不能被修改的。

应用程序可以请求一个游标类型然后执行一个不被所请求的服务器游标类型支持的Transact-SQL语句。SQL Server返回一个错误,

指出该游标类型被改变了,或者给出一组参数,隐式的转换游标。欲取得一个触发SQL Server 7.0隐式的把游标从一种类型转换为

另一种类型的参数的完整列表,请参阅SQL Server联机手册。

SCROLL选项允许除了前向的抽取以外,向后的、绝对的和相对的数据抽取。一个滚动游标使用一种键集合的游标模型,在该模型中,

任何用户提交的对表的删除和更新都将影响后来的数据抽取。只有在游标没有用INSENSITIVE选项声明时,上面的特性才起作用。

如果选择了READ ONLY选项,对游标中的行的更新就被禁止。该选项将覆盖游标的缺省选项棗允许更新。

UPDATE [OF column_list]语句用来在游标中定义一个可更新的列。如果提供了[OF column_list],那么仅仅是那些列出的列可以被修改。

如果没有指定任何列。则所有的列都是可以更新的,除非游标被定义为READ ONLY。

重要的是,注意到一个SQL Server游标的名字范围就是连接自己。这和本地变量的名字范围是不同的。

不能声明一个与同一个用户连接上的已有的游标相同名字的游标,除非第一个游标被释放。

打开一个游标

Transact-SQL不支持向一个打开的游标传递参数,这一点和PL/SQL是不一样的。当一个Transact-SQL游标被打开以后,

结果集的成员和顺序就固定下来了。其它用户提交的对原表的游标的更新和删除将反映到对所有未加INSENSITIVE选项定义

的游标的数据抽取上。对一个INSENSITIVE游标,将生成一个临时表。

抽取数据

Oracle游标只能向前移动棗没有向后或者相对滚动的能力。SQL Server游标可以向前或者向后滚动,具体怎么滚动,

要由下表给出的数据抽取选项来决定。只有在游标是用SCROLL选项声明的前提下,这些选项才能使用。

卷动选项描述

NEXT 如果这是对游标的第一次提取,则返回结果集合的第一行;否则,在结果结合内移动游标到下一行。

NEXT 是在结果集合中移动的基本方法。NEXT是缺省的游标提取(fetch)。PRIOR 返回结果集合的前一行。

FIRST 把游标移动到结果集合的第一行,同时返回第一行。

LAST 把游标移动到结果集合的最后一行,同时返回最后一行。ABSOLUTE n 返回结果集合的第n行。如果n为负数,则返回倒数第n行RELATIVE n 返回当前提取行后的第n行,如果n是负数,则返回从游标相对位置起的倒数第n行。

Transact-SQL的FETCH语句不需要INTO子句。如果没有指定返回变量,行就自动作为一个单行结果集合返回给客户。但是,

如果你的过程必须把行给客户,一个不带游标的SELECT语句更有效一些。

在每一个FETCH后面,@@FETCH_STATUS函数被更新。这和在PL/SQL 中使用CURSOR_NAME%FOUND和CURSOR_NAME%NOTFOUND变量是相似的

。@@FETCH_STATUS函数在每一次成功的数据抽取以后被设定为0。如果数据抽取试图读取一个超过游标末尾的数据,则返回一个为-1的值。

如果请求的行在游标打开以后从表上被删除了,@@FETCH_STATUS函数就返回一个为-2的值。只有游标是用SCROLL选项定义的情况下,

才会返回-2值。在每一次数据抽取之后都必须检查该变量,以确保数据的有效性。

SQL Server不支持Oracle的游标FOR循环语法。

CURRENT OF子句

更新和删除的CURRENT OF子句语法和函数在PL/SQL和Transact-SQL中是一样的。在给定游标中,在当前行上执行定位的UPDATE和DELETE。

关闭一个游标

Transact-SQL的CLOSE CURSOR语句关闭游标,但是保留数据结构以备重新打开。PL/SQL 的CLOSE CURSOR语句关闭并且释放所有的数据结构。Transact-SQL需要用DEALLOCATE CURSOR语句来清除游标数据结构。DEALLOCATE CURSOR语句同CLOSE CURSOR是不一样的,

后者保留数据结构以备重新打开。DEALLOCATE CURSOR释放所有与游标相关的数据结构并且清除游标的定义。

游标示例

下面的例子显示了在PL/SQL和Transact-SQL等价的游标语句。

Oracle Microsoft SQL

-----------------------------------------------------------------------------------------------------------

DECLARE

VSSN CHAR(9);

VFNAME VARCHAR(12);

VLNAME VARCHAR(20);

-----------------------------------------------------------------------------------------------------------

DECLARE

@VSSN CHAR(9),

@VFNAME VARCHAR(12),

@VLNAME VARCHAR(20)

CURSOR CUR1

IS

SELECT SSN, FNAME, LNAME

FROM STUDENT ORDER BY LNAME;

BEGIN

OPEN CUR1;

FETCH CUR1 INTO VSSN, VFNAME, VLNAME;

WHILE (CUR1%FOUND) LOOP

FETCH CUR1 INTO VSSN, VFNAME, VLNAME;

END LOOP;

CLOSE CUR1;

END;

-----------------------------------------------------------------------------------------------------------

DECLARE curl CURSOR FOR

SELECT SSN, FNAME, LNAME

FROM STUDENT ORDER BY SSN

OPEN CUR1

FETCH NEXT FROM CUR1

INTO @VSSN, @VFNAME, @VLNAME

WHILE (@@FETCH_STATUS <> -1)

BEGIN

FETCH NEXT FROM CUR1 INTO @VSSN, @VFNAME, @VLNAME

END

CLOSE CUR1 DEALLOCATE CUR1

SQLServer(多语句表值函数代码)

SQLServer(多语句表值函数代码) 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[ufnGetContactInformation](@ContactID int) RETURNS @retContactInformation TABLE ( -- Columns returned by the function [ContactID] int PRIMARY KEY NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [JobTitle] [nvarchar](50) NULL, [ContactType] [nvarchar](50) NULL ) AS -- Returns the first name, last name, job title and contact type for the specified contact. BEGIN

DECLARE @FirstName [nvarchar](50), @LastName [nvarchar](50), @JobTitle [nvarchar](50), @ContactType [nvarchar](50); -- Get common contact information SELECT @ContactID = ContactID, @FirstName = FirstName, @LastName = LastName FROM [Person].[Contact] WHERE [ContactID] = @ContactID; SET @JobTitle = CASE -- Check for employee WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e WHERE e.[ContactID] = @ContactID) THEN (SELECT [Title] FROM [HumanResources].[Employee] WHERE [ContactID] = @ContactID) -- Check for vendor

列举SQLServer几个基本的函数的应用.docx

-聚合函数 use pubs go select avg(distinct price) 一算平均数 from titles where type=*business' go use pubs go select max(ytd_sales) 一最大数 from titles go use pubs go select min(ytd_sales)"最小数 from titles go use pubs go select type,sum(price),sum(adva nee) —求和 from titles group by type order by type go use pubs go select count(distinct city) 一求个数 from authors go use pubs go select stdev(royalty) ■■返回给定表达式中所有值的统计标准偏差from titles go use pubs go select stdevp(royalty)-返回表达式中所有制的填充统计标准偏差

from titles go use pubs go select var(royalty)"返回所有值的统计方差 from titles go use pubs go select varp(royalty)-返回所有值的填充的统计方差 from titles go -数学函数 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 ,H123m,ascii(,abc,) as H,abc M,一转换成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) 一把数值转换成字符串

SQLServer和Oracle语法的差异

SQLServer和Oracle是大家经常用到的数据库,在此总结出这些常用函数以供大家参考。 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16 10.取平方根 S:select SQRT(4) value 2 O:select SQRT(4) value from dual 2 11.求任意数为底的幂

SQLSERVER操作命令

SQLSERVER数据库操作 ******操作前,请确定SQL的服务已经开启******** 一:登录进入sql数据库 1、开始---所有程序---Microsoft SQL Server 2005---SQL Server Management Studio Express 2、此时出现“连接到服务器”的对话框, “服务器名称”设置为SQL数据库所在机器的IP地址 “身份验证”设置为SQL Server身份验证或者Windows 身份验证 填写登录名和密码后,点击“连接”按钮,即可进入到SQL数据库操作界面。 二:新建数据库 登录进去后,右击“数据库”,选择—“新建数据库” 设置数据库名称,在下面的选项卡中还可以设置数据库的初始大小,自动增长,路径。 点击确定,一个数据库就建好了。 三:如何备份的数据库文件。 登录进入后,右击相应的需要备份数据库----选择“任务” 目标下的备份到,点击“添加”按钮可以设置备份数据库保存的路径。 四:如何还原备份的数据库文件。(以本地机器为例子) 1、设置服务器名称,点击右边的下拉框的三角,选择“浏览更多…”。 此时出现查找服务器对话框,选择“本地服务器”---点开“数据库引擎”前面 的三角---选中出现的服务器名称—确定。 (注:可以在“网络服务器”选项卡中设置网络服务器) 2、设置身份验证,选择为“windows身份验证” 3、点击连接按钮,进入数据库管理页面 4、右击“数据库”,选择“还原数据库”,出现还原数据库的对话框 还原的目标----目标数据库,这里设置数据库的名字 还原的源----选择“源设备”,在弹出的对话框中点击“添加”按钮,找到所备 份的数据库文件,确定。 5、此时,在还原数据库对话框中会出现所还原的数据库的信息。在前面选中所需还 原的数据库。确定。 6、为刚刚还原的数据库设置相应的用户。 a点开“安全性”---右击“登录名”---新建登录名 b 设置登录名(假如为admin),并设置为SQL Server身份验证,输入密码,去除 “强制实施密码策略”前的勾。 C 找到导入的数据库,右击此数据库----选择“属性”,在选择页中,点击“文件” 设置所有者,点击右边的按钮,选择“浏览”,找到相应的用户(如admin)。确 定。。 7、此时重新以admin的身份进入,就可操作相应的数据库。

sqlserver日期时间函数

sql server日期时间函数 Sql Server中的日期与时间函数 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回 10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值

SQLSERVER和MYSQL语法和关键字的区别详解

SQL Server和MySql语法和关键字的区别 ——用于SQLServer到MySql的转换 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。 ◆根本的区别是它们遵循的基本原则 二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM,Heap,InnoDB,and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。 ◆发行费用:MySQL不全是免费,但很便宜 当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。 ◆性能:先进的MySQL 纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式 MyISAM。MyISAM数据库与磁盘非常地兼容而不占用过多的CPU和内存。 MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX 系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。 因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL作为后台数据库。 当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。 ◆安全功能

SQLServer常用关键字数据类型和常用语法

SQL Server 2008 常用关键字、数据类型和常用语法 常用关键字: SQL server 2008一共大约有180多个关键字。简要分为主要关键字、辅助关键字和函数类关键字。本文就常用的这三类关键字进行语法说明和用例。 说明:1、比较好的习惯是,数据库名以D_开头,表名用T_开头,字段名以F_开头,这样可以防止和关键字重名。 2、如果确实用到了系统关键字,就要在关键上加[]方括号,以与关键字进行区别。例如有一个用户表被命名为USER,则查询该表内容的时候:SELECT * FROM USER语句是错误的,应该是SELECT * FROM [USER]。因为USER是关键字。

数据类型: SQL Server 2008一共有36种数据类型。具体如下:

常用语法: 一、数据库 【创建数据库】 CREATE DATABASE 【修改数据库】 ALTER DATABASE 【删除数据库】 DROP DATABASE 二、表结构 【创建数据表】 1、设定字段是允许空,非空、标识列,自增和主键约束。 CREATE TABLE T_CUSTOMER--表名 (CUSTOMERID INT IDENTITY(1,1),--客户ID,标识列,从开始,每次自增 COMPANYNAME NVARCHAR(50)NOT NULL,--,如果不显示指明NOT NULL,系统默认是允许空的USERNAME NVARCHAR(10)NOT NULL,--联系人姓名,非空 PHONENUMBER CHAR(11)NULL,--联系电话,允许为空 CONSTRAINT T_CUSTOMER_PrimaryKey PRIMARY KEY (CUSTOMERID))--设定USERID为主键,用括号括起来 /*每个单词之间是空格隔开,每个字段之间用单引号隔开,整个字段定义部分用括号括起来*/ /*T_RegUser_PrimaryKey是约束名*/ 2、设定字段是UNIQUEIDENTIFIER数据类型,唯一性约束,CHECK约束和默认值约束。

sqlserver常用函数

Sql Server 常用函数 1,统计函数avg, count, max, min, sum 2, 3,多数聚会不统计值为null的行。可以与distinct一起使用去掉重复的行。可以与group by 来分组4, 5, 2,数学函数 6, 7, SQRT 8, ceiling(n) 返回大于或者等于n的最小整数 9, floor(n), 返回小于或者是等于n的最大整数 10,round(m,n), 四舍五入,n是保留小数的位数 11,abs(n) 12,sign(n), 当n>0, 返回1,n=0,返回0,n<0, 返回-1 13,PI(), 3.1415.... 14,rand(),rand(n), 返回0-1之间的一个随机数 15,3,字符串函数 16, 17,ascii(), 将字符转换为ASCII码, ASCII('abc') = 97 18,char(), ASCII 码转换为字符 19,low(),upper() 20,str(a,b,c)转换数字为字符串。a,是要转换的字符串。b是转换以后的长度,c是小数位数。 str(123.456,8,2) = 123.46 21,ltrim(), rtrim() 去空格 22,left(n), right(n), substring(str, start,length) 截取字符串 23,charindex(子串,母串),查找是否包含。返回第一次出现的位置,没有返回0 24,patindex('%pattern%', expression) 功能同上,可是使用通配符 25,replicate('char', rep_time), 重复字符串 26,reverse(char),颠倒字符串 27,replace(str, strold, strnew) 替换字符串 28,space(n), 产生n个空行 29,stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是开始位置,3是要从原来串中删除的字符长度,ijlmn是要插入的字符串。 30,3,类型转换函数: 31, 32,cast, cast( expression as data_type), Example: 33,SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' 34,convert(data_type, expression) 35,4,日期函数 36, 37,day(), month(), year() 38,dateadd(datepart, number, date), datapart指定对那一部分加,number知道加多少,date指定在谁的基础上加。datepart的取值包括,

sqlserver日期函数

sqlserver日期函数 SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:0 0.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 select datediff(day,'2004-09-18','2004-09-01') --返回:-17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数interval的设定值如下: 值缩写(Sql Server)(Access 和ASP) 说明 Year Yy yyyy 年1753 ~ 9999 Quarter Qq q 季1 ~ 4 Month Mm m 月1 ~ 12

SQLSERVER函数大全

SQL SERVER函数大全 SQL SERVER命令大全 SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16

(完整版)SQLServer存储过程的基本概念以及语法汇总

SQL Server存储过程的基本概念以及语法【转】 存储过程的概念 SQL Server提供了一种方法,它可以将一些固定的操作集中起来由SQL Server 数据库服务器来完成,以实现某个任务,这种方法就是存储过程。 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。 在SQL Server中存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,而且减少网络通信的负担。 安全性更高。 创建存储过程 在SQL Server中,可以使用三种方法创建存储过程: ①使用创建存储过程向导创建存储过程。 ②利用SQL Server 企业管理器创建存储过程。 ③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。

下面介绍使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程 创建存储过程前,应该考虑下列几个事项: ①不能将 CREATE PROCEDURE 语句与其它SQL语句组合到单个批处理中。 ②存储过程可以嵌套使用,嵌套的最大深度不能超过32层。 ③创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。 ④存储过程是数据库对象,其名称必须遵守标识符规则。 ⑤只能在当前数据库中创建存储过程。 ⑥一个存储过程的最大尺寸为128M。 使用CREATE PROCEDURE创建存储过程的语法形式如下: QUOTE: CREATE PROC[EDURE]procedure_name[;number][;number] [{@parameter data_type}[VARYING][=default][OUTPUT]][,...n] WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] [FOR REPLICATION] AS sql_statement [ ...n ] 用CREATE PROCEDURE创建存储过程的语法参数的意义如下:

sqlserver函数大全

在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缓存与预编译可执行对象的方式。例如,即席查询可以使用任何函数,不过如果打算构建先进的、可重用的编程对象,理解这种区别很重要。 以下这些函数是确定性的: ●?AVG()(所有的聚合函数都是确定性的) ●?CAST() ●?CONVERT() ●?DATEADD() ●?DATEDIFF() ●?ASCII() ●?CHAR() ●?SUBSTRING() 以下这些函数与变量是非确定性的: ●?GETDATE()

SQLServer OLAP MDX 函数的使用介绍

MDX 函数的使用介绍 根据SqlServer2000 Analysis Services提供的帮助材料展开,略作说明并且根据各个函数的侧重点编写相应的MDX。 数组函数 函数描述 SetToArray将一个或多个集合转换为数组,以用于用户定义函数中。 维度函数 函数描述 Dimension返回包含指定的层次结构、级别或成员的维度。 成员 ?Member?.Dimension 返回包含?Member?的维度。 级别 ?Level?.Dimension 返回包含?Level?的维度。 层次结构 ?Hierarchy?.Dimension 返回包含?Hierarchy?的维度 WITH Member [Measures].[abc] As '[Time]https://www.360docs.net/doc/1a8039400.html,' SELECT { [Time].&[1997] } ON COLUMNS ,{ [Product].[All Products] } ON ROWS FROM [Sales] WHERE ( [Measures].[abc]) Dimensions返回多维数据集中基于零的位置是由数值表达式指定的维度,或者其名称是由字符串指定的维度。 数字 Dimensions(?Numeric Expression?) 返回这样的维度,该维度在多维数据集中以零为基的位置是由?Numeric Expression?指定的。 说明Measures 维度总由Dimensions(0) 表示。 字符串 Dimensions(?String Expression?) 返回这样的维度,该维度的名称是由?String Expression?指定的 WITH Member [Measures].[abc] As 'Dimensions("[Time]").Name' SELECT { [Time].&[1997] } ON COLUMNS , { [Product].[All Products] } ON ROWS FROM [Sales] WHERE ( [Measures].[abc]) 层次结构函数

SQLServer用户自定义函数详细介绍

SQL Server用户自定义函数 用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自定义函数分为三种类型: (1) 标量函数 标量函数返回一个确定类型的标量值,其返回值类型为除 TEXT 、 NTEXT 、IMAGE 、 CURSOR 、 TIMESTAMP 和 TABLE 类型外的其它数据类型。函数体语句定义 在 BEGIN-END 语句内。在 RETURNS 子句中定义返回值的数据类型,并且函数的最后一条语句必须为 Return 语句。创建标量函数的格式: Create Function 函数名(参数) Returns 返回值数据类型 [With {Encryption|Schemabinding}] [AS] BEGIN SQL 语句 ( 必须有 Return 子句 ) END 举例: ******************************************************************* CREATE FUNCTION dbo.Max ( @a int, @b int ) RETURNS int AS BEGIN DECLARE @max int IF @a>@b SET @max=@a ELSE SET @max=@b Return @max END *******************************************************************调用标量函数可以在 T-SQL 语句中允许使用标量表达式的任何位置调用返 回标量值(与标量表达式的数据类型相同)的任何函数。必须使用至少由两部分组成名称的函数来调用标量值函数,即架构名 . 对象名,如 dbo.Max(12,34) 。 (2) 内联表值函数 内联表值型函数以表的形式返回一个返回值,即它返回的是一个表。内联表 值型函数没有由 BEGIN-END 语句括起来的函数体。其返回的表是由一个位于RETURN 子句中的 SELECT 命令从数据库中筛选出来。内联表值型函数功能相当 于一个参数化的视图。

SQLServer和MySql语法和关键字的区别详解

SQL Server 和MySql 语法和关键字的区别 ——用于SQLServer到MySql的转换 对于程序开发人员而言,目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。除了在显而易见的软件价格上的区别之外,这两个产品还有什么明显的区别吗?在这二者之间你是如何选择的?让我们看看这两个产品的主要的不同之处,包括发行费用,性能以及它们的安全性。 ◆根本的区别是它们遵循的基本原则 二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQL服务器的Sybase引擎,但MySQL能够提供更多种的选择,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的关键词,所以它比SQL服务器要少一些相关的数据库。同时,MySQL也缺乏一些存储程序的功能,比如MyISAM引擎联支持交换功能。 ◆发行费用:MySQL不全是免费,但很便宜 当提及发行的费用,这两个产品采用两种绝然不同的决策。对于SQL服务器,获取一个免费的开发费用最常的方式是购买微软的Office或者Visual Studio的费用。但是,如果你想用于商业产品的开发,你必须还要购买SQL Server Standard Edition。学校或非赢利的企业可以不考虑这一附加的费用。 ◆性能:先进的MySQL 纯粹就性能而言,MySQL是相当出色的,因为它包含一个缺省桌面格式 MyISAM。MyISAM 数据库与磁盘非常地兼容而不占用过多的CPU和内存。 MySQL可以运行于Windows系统而不会发生冲突,在UNIX或类似UNIX 系统上运行则更好。你还可以通过使用64位处理器来获取额外的一些性能。 因为MySQL在内部里很多时候都使用64位的整数处理。Yahoo!商业网站就使用MySQL 作为后台数据库。 当提及软件的性能,SQL服务器的稳定性要比它的竞争对手强很多。但是,这些特性也要付出代价的。比如,必须增加额外复杂操作,磁盘存储,内存损耗等等。如果你的硬件和软件不能充分支持SQL服务器,我建议你最好选择其他如DBMS数据库,因为这样你会得到更好的结果。 ◆安全功能

SQLServer时间日期函数详解

SQLServer时间日期函数详解,SQLServer,时间日期, 1. 当前系统日期、时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:0 0.000 3. datediff 返回跨两个指定日期的日期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 select datediff(day,'2004-09-18','2004-09-01') --返回:-17 4. datepart 返回代表指定日期的指定日期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回10 5. datename 返回代表指定日期的指定日期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 6. day(), month(),year() --可以与datepart对照一下 select 当前日期=convert(varchar(10),getdate(),120) ,当前时间=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年第多少周=datename(week,'2004-10-15') ,今天是周几=datename(weekday,'2004-10-15') 函数参数/功能 GetDate( ) 返回系统目前的日期与时间 DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1 DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期 DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称 参数interval的设定值如下: 值缩写(Sql Server)(Access 和ASP) 说明 Year Yy yyyy 年1753 ~ 9999 Quarter Qq q 季1 ~ 4 Month Mm m 月1 ~ 12 Day of year Dy y 一年的日数,一年中的第几日1-366

SQLServer2005函数大全

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')返回3 select 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')返回 7 select 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')返回4 select patindex('ab%','123ab456')返回0 select patindex('___ab%','123ab456')返回1 select patindex('___ab_','123ab456')返回0 在字符串表达式1中可以使用通配符,此字符串的第一个 字符和最后一个字符通常是%。 %表示任意多个字符,_表示任意字符 返回字符串表达式2中字符串表达式1所指定模式第一次出现 的起始位置。没有找到返回0 reverse (字符串表达式) select reverse('abcde')返回 edcba返回指定字符串反转后的新字符串space (整数表达式) select'a'+space(2)+'b' 返回 a b返回由指定数目的空格组成的字符串。

相关文档
最新文档