`

SQL2008数据类型

阅读更多

SQL2008数据类型

SQL2008数据类型

--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--原帖地址

引言

本文介绍了SQL Server 2008里发现的新时间和日期的数据类型,如DATETIME2TIMEDATE。也将回顾以前版本一直沿用下来的传统的数据类型。另外对管理数据类型的TSQL命令如CASTCONVERT也做了相应的说明。

CAST和CONVERT

首先来回顾CASTCONVERT是因为这些TSQL函数可以允许我们更加容易地查看数据类型之间的区别。CASTCONVERT用来更改一个值的数据类型或格式。两个函数的目的相同,但CONVERT有能力去更改格式。格式可以用来把数字4431.334更改为常用的货币风格4,431.33(每3个数字一个逗号并且小数点后保留2位),或者把4位的年2007更改位两位的年07


CAST的语法是CAST(value AS new type)。例如,我们声明一个DATETIME的变量,然后把它转为字符串:

DECLARE @myTime AS DATETIME;
SET @myTime = '1/1/2007';
SELECT @myTime;

结果:2007-01-01 00:00:00.000

SELECT CAST(@myTime as varchar(50));

结果:Jan 1 2007 12:00AM


相反,我们也可以把字符串转为日期:
SELECT CAST('Jan 1 2007 12:00AM' as DATETIME)

结果:2007-01-01 00:00:00.000


CONVERT的语法是CONVERT(newtype,value,Style)Style是可选的。前面那个CAST例子可以用CONVERT重写成下面的样子:

SELECT CONVERT(DATETIME, 'Jan 1 2007 12:00AM')
结果: 2007-01-01 00:00:00.000


Style部分对于格式化输出结果是很便利的。为了用常用的格式mm/dd/yy格式来显示一个日期,仅需给CONVERTStyle添加一个值即可,如下:

DECLARE @myDate AS DATETIME;
SET @myDate = '1/1/2007';
SELECT CONVERT(varchar(50), @myDate, 1)

结果: 01/01/07


要把月份显示为字母,把CONVERTStyle的值从1改为7即可:

SELECT CONVERT(varchar(50), @myDate, 7)

结果: Jan 01, 07


Style的完整列表可以在联机丛书的CASTCONVERT下找到。

DATETIME

标准的DATETIME数据类型也带入SQLServer2008了。尽管类型单一,但它却有日期和时间两部分。DATETIME8个字节,前4个字节存储日期,后4个字节存储时间。日期部分实际上是与系统内部的基准日期1900-1-1相差的天数。这可以通过传递一个空的字符串作为datetime的值,然后查看结果。下面创建一个有一个字段的表,表名是Types,字段名是standardDatetime。字段的类型是DATETIME。传递一个空的字符串,然后返回结果:

INSERT INTO Types (standardDateTime) VALUES('');
SELECT standardDateTime FROM Types;

结果:1900-01-01 00:00:00.000


DATETIME类型的列的年份可以在17539999之间。时间部分精确到3.33毫秒。如果你不需要秒且你的年份在19002097之间,那么你可以使用SMALLDATETIME类型。它占的字节数是DATETIME的一半,且秒被四舍五入到最近的分钟,如下:

DECLARE @myDate DATETIME;
SET @myDate = '2007-10-13 12:35:29.998';
SELECT @myDate;


结果:2007-10-13 12:35:29.997


SELECT CAST(@myDate AS SMALLDATETIME);

结果:2007-10-13 12:35:00


第一个结果是标准的DATETIME。第二个结果使用CAST函数把@myDate转为SMALLDATETIME来显示。

一个常见的DATETIME问题是当仅用日期来选择的时候会出错。例如,如果我们往测试表里载入下面3个值:

INSERT INTO Types(standardDateTime)
VALUES

('2007-10-12 12:35:29.998'),

('2007-10-11'),

(GETDATE())


译者注:这里的Insert语句和SQL2005及以前版本的SQLServer有所不同,SQL2008支持在一个语句里给表插入多行,就像多次执行以前版本的Insert语句一样,这个功能是SQL3标准里制定的,SQL2008实现了这个功能,的确不错。)

然后执行一个select语句来查找2007-10-12

SELECT standardDateTime
FROM Types
WHERE standardDateTime = '2007-10-12';


没有任何记录返回,因为时间随着一起插入了。当使用GETDATE()函数插入时也会发生相同的结果。我们需要和日期一起来匹配时间。如果插入的时候没有包括时间,如’2007-10-11’,那么我们选出来的结果会如下显示:

SELECT * FROM Types WHERE standardDateTime = '2007-10-11'

结果:2007-10-11 00:00:00.000


作为一个小的提示,注意以前版本的INSERT语句。SQL2008现在允许在一个语句里插入多行了。

DATETIME2

DATETIME2SQL2008里新的数据类型。这个新的类型类似于标准的DATETIME,但精确度更高。年的范围在公园111日到99991231。时间也可以精确到秒后面的7位数。时钟也是24小时制了。所以,8pm可以存储为军用时间20:00。声明该新类型的语法可以是DATETIME,或者DATETIME(n)n是在07之间用来指定秒后面的小数部分。

SELECT CAST('2007-10-20 20:30:05.1234567' as DATETIME2)

结果:2007-10-20 20:30:05.1234567

SELECT CAST('2007-10-20 20:30:05.1234567' as DATETIME2(4))


结果:2007-10-20 20:30:05.1235


分开的DATETIME

SQL2008里日期和时间可以分开而不是放在一起存储了。分别为DATETIME数据类型。TIME类型可以象DATETIME2类型一样指定秒的小数部分了。示例如下:


SELECT CAST('2007-10-20 20:30:05.1234567' as DATE)

结果:
2007-10-20


SELECT CAST('2007-10-20 20:30:05.1234567' as TIME)


结果: 20:30:05.1234567


DATETIMEOFFSET

对时区敏感的值现在在SQL2008里也可以使用新的数据类型DATETIMEOFFSET来处理了。该新类型结合了DATETIME2和一个偏移量部分来显示,如下:


SELECT CAST('2007-10-20 20:30:05.1234567 +5:0' as DATETIMEOFFSET)

结果:2007-10-20 20:30:05.1234567 +05:00


DATETIME2一样,DATETIMEOFFSET也有一个可选的参数(n)来指定秒后的小数位数,如下:

SELECT CAST('2007-10-20 20:30:05.1234567 +5:0' as DATETIMEOFFSET(3))

结果:2007-10-20 20:30:05.123 +05:00


小结

SQL2008包括了一些新的非常便利的数据类型DATETIME。下面是它们之间互相转换的一些例子:


CAST('2007-10-20 20:30:05.1234567 +5:0' as DATE) = 2007-10-20
CAST('2007-10-20 20:30:05.1234567 +5:0' as TIME(7)) = 20:30:05.1234567
CAST('2007-10-20 20:30:05.123' as SMALLDATETIME) = 2007-10-20 20:30:00
CAST('2007-10-20 20:30:05.123' as DATETIME) = 2007-10-20 20:30:05.123
CAST('2007-10-20 20:30:05.1234567 +5:0' as DATETIME2(7)) = 2007-10-20 20:30:05.1234567
CAST('2007-10-20 20:30:05.1234567 +5:0' as DATETIMEOFFSET(7)) = 2007-10-20 20:30:05.1234567 +05:00
分享到:
评论

相关推荐

    SQl2008数据类型详解

    详细介绍了SQl2008的各种常用的数据类型,

    SQL SERVER的数据类型自定义

    ### SQL Server 数据类型详解与自定义数据类型创建 在数据库设计与管理中,理解并熟练掌握数据类型至关重要,因为它们直接影响到数据存储的效率、安全性和查询性能。SQL Server 提供了丰富的内置数据类型,同时也...

    sqlserver数据库类型对应Java中的数据类型

    SQL Server 数据库类型对应 Java 中的数据类型 SQL Server 是一个关系数据库管理系统,Java 是一个广泛使用的编程语言。在 Java 中,对数据库的操作需要通过 JDBC(Java Database Connectivity)来实现,而在 JDBC ...

    SQL_Server_数据类型详解

    SQL_Server_数据类型详解 SQL Server 数据类型是指在 SQL Server 中存储数据的格式,它可以分为整数型、浮点型、二进制型等多种类型。了解 SQL Server 的数据类型对于数据库的设计和开发至关重要。 整数型数据类型...

    SqlServer数据库的数据类型

    ### SqlServer数据库的数据类型详解 数据类型在编程与数据库管理中扮演着至关重要的角色,它不仅定义了数据的存储方式,还决定了数据可以执行的操作。SQL Server作为一种广泛使用的数据库管理系统,提供了丰富的...

    sql server 数据类型

    SQL Server 数据类型是数据库管理系统中用于定义和存储数据的基础组件,它们决定了数据的结构和特性。在SQL Server 2000中,数据类型的选择至关重要,因为它直接影响到数据的存储方式、大小以及处理效率。 首先,让...

    SQL2000数据类型

    在SQL Server 2000中,数据类型主要分为几大类别,包括整数数据类型、浮点数据类型、二进制数据类型、字符数据类型、日期和时间数据类型、以及其他特殊数据类型。 一、整数数据类型 1. INT (INTEGER):INT数据类型...

    SQL数据库数据类型说明

    SQL 数据库数据类型说明 SQL 数据库中有多种数据类型,每种数据类型都有其特点和应用场景。了解这些数据类型是 SQL 编程的基础。 1. 整型数据类型 SQL 数据库中的整型数据类型包括 bit、int、smallint 和 tinyint...

    SQL Server 数据类型总结

    在探讨SQL Server数据类型的深度与广度时,我们不得不承认,这一主题是数据库设计与管理中的基石之一。SQL Server作为一款强大的关系型数据库管理系统,提供了丰富多样的数据类型,旨在满足不同场景下的数据存储需求...

    SQL的数据类型与Java数据类型的对应关系

    SQL的数据类型与Java数据类型的对应关系,是程序员必备的基础知识,欢迎大家下载。

    SQL 数据类型详细介绍

    SQL 数据类型详细介绍 SQL Server 数据类型是数据库设计和开发的基础,了解不同的数据类型是设计高效、可靠的数据库的关键。本文将详细介绍 SQL Server 的基本数据类型,包括整数、浮点数、字符、日期时间、二进制...

    sql server数据类型大全

    SQL Server 2008提供了丰富的数据类型,允许用户根据需要存储不同类型的数据,如数值、日期/时间、文本、二进制等。以下是对标题和描述中提到的一些关键知识点的详细解释: 1. **创建自定义数据类型**: 自定义...

    Microsoft Access数据类型与SQL Server数据类型的区别

    ### Microsoft Access 数据类型与 SQL Server 数据类型的主要区别 在数据库设计和开发过程中,选择合适的数据类型对于确保数据的准确性和优化存储空间至关重要。Microsoft Access 和 SQL Server 虽然都是微软旗下的...

    SQL语法参考手册(SQL)数据类型

    首先,SQL的数据类型分为基本数据类型和复杂数据类型。基本数据类型包括: 1. 整数类型: - `smallint`:16位整数。 - `integer` 或 `int`:32位整数。 2. 浮点数类型: - `decimal(p,s)`:精确到小数点后s位的...

    SQLServer2008中的数据类型总结.doc

    在SQL Server 2008中,数据类型是数据库设计的核心元素之一,它们决定了存储数据的格式、范围和精度。本文将深入探讨SQL Server 2008中的各种数据类型,帮助你理解如何根据需求选择合适的数据类型。 首先,我们可以...

    SQL数据类型分析

    SQL中数据类型分析 介绍了字符串 整形 及其他数据类型的选择

    SQl数据类型详解

    SQL 数据类型详解 SQL 数据类型是指在 SQL Server 中用来存储数据的类型。不同的数据类型可以存储不同的数据,如二进制数据、字符数据、Unicode 数据、日期和时间数据、数字数据等。 一、 二进制数据类型 二进制...

    SQL SEVER 数据类型

    SQL Server 提供了 25 种数据类型,包括二进制数据类型、字符数据类型、Unicode 数据类型、日期和时间数据类型等。每种数据类型都有其特点和应用场景,本文将详细介绍这些数据类型的特点和使用方法。 二进制数据...

    ORACLE_SQLSERVER数据类型对照表

    ORACLE_SQLSERVER数据类型对照表

    SQL数据类型及语句大全

    一、SQL数据类型 1. 整数类型:包括TINYINT、SMALLINT、INTEGER、BIGINT。它们分别用于存储不同范围的整数,如TINYINT通常用于存储-128到127之间的整数。 2. 浮点数类型:如FLOAT和DOUBLE,用于存储带有小数的数值...

Global site tag (gtag.js) - Google Analytics