SQL Server提供了用于获取数据库对象的元数据信息的工具,比如数据库中有什么表、表中有什么列,等等。这些工具包括目录视图(catalog view)、信息架构视图(information schema view)、系统存储过程和函数。这一方面的内容在SQL Server联机丛书的“查询 SQL Server系统目录(Querying the SQL Server System Catalog)“一节有详细的文档。目录视图  目录视图提供了关于数据库中各对象的非常详细的信息,包括SQL Server特定的信息。例如,如果想列出数据库中的各个表,以及它们的架构名称,只要按以下所示的方法去查询 Read More
posted @ 2010-12-26 00:33 宁静月光 Views(430) Comments(0) Diggs(0) Edit
本节介绍一些对日期和时间数据类型进行操作的函数,包括GETDATE、CURRENT_TIMESTAP、GETUTCDATE、SYSDATETIME、SYSUTCDATETIME、SYSDATETIMEOFFSET、CAST、CONVERT、SWITCHOFFSET、TODATETIMEOFFSET、DATEADD、DATEDIFF、DATEPART、YEAR、MONTH、DAY,以及DATENAME。注意,SYSDATETIME、SYSUTCDATETIME、SYSDATETIMEOFFSET、SWITCHOFFSET,以及TODATETIMEOFFSET是SQL Server 2008中新增 Read More
posted @ 2010-12-25 23:50 宁静月光 Views(718) Comments(0) Diggs(0) Edit
如果要过滤日期范围(比如,整年或整月),比较自然的方法就是使用YEAR和MONTH之类的函数。例如,以下查询返回2007年中生成的所有订单:[代码]  不过,应该小心的一点是:在大多数情况下,当对过滤条件中的列应用了一定的处理后,就不能以有效的方式来使用索引了。为了潜在地有效利用索引,就需要对谓词进行调整,以便对过滤条件中的列不进行处理,如下所示:[代码]  类似地,不应该使用函数来过滤某个月生成的订单,如下所示:[代码]  而应该使用一个范围过滤条件,如下所示:[代码] Read More
posted @ 2010-12-22 23:11 宁静月光 Views(418) Comments(0) Diggs(0) Edit
SQL Server 2008引入了可以单独使用日期和时间部分的数据类型,但在前面的讨论中还没有区分这两部分。如果要在SQL Server 2008之前版本的SQL Server中只使用日期或时间,只能选用同时包含这两种组成部分的DATETIME或SMALLDATETIME数据类型之一。在要实现日期和时间逻辑的地方,也可以使用整数或字符串之类的数据类型,但此处暂不讨论这种用法。如果想选用DATETIME或SMALLDATETIME类型,那么当只使用日期数据时,保存数据的时间值将是午夜(时间部分全是0)。当只使用时间数据时,保存数据的日期值将是基础日期1900年1月1日。  例如,Sales.O Read More
posted @ 2010-12-22 23:00 宁静月光 Views(363) Comments(0) Diggs(0) Edit
当需要指定日期和时间数据类型的字符串文字值(常量)时,应该考虑以下几件事。首先,SQL Server并没有提供表达日期和时间字符串的具体方法,这听起来可能会有点古怪;相反,它允许你指定不同类型的字符串文字,再将其转换(显示或隐式地)为相应的日期和时间数据类型。使用字符串来表示日期和时间值是一种最佳实践,如下面这个例子所示:[代码]  SQL Server会把文字'20070212'看作是一个字符串常量,而不是日期和时间常量;但因为表达式涉及了两种不同类型的操作数,所以就要把其中一种操作数的类型转换为另一种。当一个表达式涉及的两种操作数具有不同类型时,就需要把其中一种操作数的类型隐式地转换为另一 Read More
posted @ 2010-12-21 22:56 宁静月光 Views(518) Comments(0) Diggs(0) Edit
在SQL Server 2008之前,SQL Server支持两种表示时间的数据类型:DATETIME和SMALLDATETIME。这两种类型都包括了日期和时间组成部分,而且这两部分是不能分开的。它们在存储需求、支持的日期范围,以及日期的精度上都有所不同。SQL Server 2008新引入了DATE、TIME、DATETIME2和DATETIMEOFFSET数据类型。DATE是单独表示日期的数据类型,TIME是单独表示时间的数据类型,DATETIME2是一种比DATETIME具有更大的日期范围和更好的精度的日期类型,DATETIMEOFFSET具有一个时区组成部分。下表列出了每种日期和时间数 Read More
posted @ 2010-12-21 21:35 宁静月光 Views(380) Comments(0) Diggs(0) Edit
T-SQL提供了一个LIKE谓词,用于检查字符串是否能够匹配指定的模式。在前面介绍的PATINDEX函数中已经使用了类似的模式。接下来的这节将介绍模式中使用的通配符(wildcard),并演示它们的用法。%(百分号)通配符  百分号代表任意长度的字符串,包括空字符串。例如,以下查询返回姓氏(last name)以字符'D'开头的所有雇员:[代码]_(下划线)通配符  下划线代表任意单个字符。例如,以下查询返回姓氏(last name)第二个字符为'e'的所有雇员:[代码][字符列]通配符  方括号中包含一列字符(例如'[ABC]'),表示必须匹配指定字符中的一个字符。例如,以下查询返回姓氏 Read More
posted @ 2010-12-21 00:23 宁静月光 Views(397) Comments(0) Diggs(1) Edit
字符串串联运算符(加号[+])  T-SQL提供了加号(+)运算符,可以将两个或多个字符串合并或串联成一个字符串。例如,以下对Employees表的查询将雇员的firstname列、一个空格,以及lastname列串联起来,生成完整的姓名fullname列:[代码]  ANSI SQL规定对NULL值执行字符串串联运算也会产生NULL值的结果。这是SQL Server的默认行为。例如,考虑以下对Customers表的查询,如代码如下:[代码]  Customers表中一些行的region列是NULL。对于这些行,SQL Server默认在结果的location列中也返回一个NULL:  通过将 Read More
posted @ 2010-12-19 11:26 宁静月光 Views(635) Comments(0) Diggs(0) Edit
排序规则是字符数据的一个属性,封装了几个方面的特性,包括多语言支持(和Unicode类型有关,因为它支持所有语言)、排序规则、区分大小写、区分重音,等等。要得到系统中目前支持的所有排序规则极其描述,可以查询表函数fn_helpcollations,如下所示:[代码]  例如,排序规则Latin1_General_CI_AS表示:Latin1_General  支持的语言是英语。字典排序  基于字典顺序对字符数据进行排序和比较('A'和'a''B'和'b')。这一排序规则之所以采用字典顺序,是因为当没有显示地定义任何排序规则时,就默认使用字典顺序(更确切地说,排序规则名称中没有显示地出现BIN Read More
posted @ 2010-12-18 21:48 宁静月光 Views(521) Comments(0) Diggs(0) Edit
SQL Server支持两种字符数据类型——普通字符和Unicode字符。普通字符数据类型包括CHAR和VARCHAR,Unicode字符数据类型包括NCHAR和NVARCHAR。它们二者的区别是:普通字符使用一个字节(byte)来保存每个字符,而Unicode字符则需要两个字节。当使用普通字符类型时,由于一个列只用一个字节来保存每个字符,所以就限制在这个列中只能使用英语这一语言,因为一个字节只能代表256(2^8)个不同的字符。一个列所支持的语言是由列的有效排序规则(collation)属性决定的。当使用Unicode数据类型时,一个列可以代表65535(2^16)个不同的字符,因为这时用两 Read More
posted @ 2010-12-18 20:52 宁静月光 Views(228) Comments(0) Diggs(0) Edit