天天看点

使用正确的数据类型

大家应该都能正确的使用数据类型,这看起来似乎是非常简单的事情。但不幸的是,它很容易让你变得很困惑。举个简单的例子,如果运行此查询:

SELECT a.ModifiedDate

FROM Person.Address AS a

WHERE a.AddressID = ;
           

输出是这样的:

使用正确的数据类型

这样正常吗?你会在上面看到年、月、日,紧跟着时间是以小时、分钟和秒作为一个小数被显示。在这里有一个问题,此查询应该是报告系统的,并且他们也只关心日期的值。地址表已被修改,所以他们不希望看到时间。另外,一些人也很挑剔。他们很不喜欢看到日期格式化的这种方式。他们更倾向于看到“2009年1月20日”。

然而最简单的办法就是只需要改变varchar列。你可以修改时间和所需的输出格式。问题就解决了,这很容易…

直到有人输入“Janry 2009”稍微重整了拼写,这时你的报告会看起来很乱。或者他们要你在最后2个星期开始做筛选。无论何时运行报告,你现在都不能很容易在列上做日期计算。即使你克服这个问题,使用CAST格式化(连同ISDATE 试图捕获所有那些现已在系统中的错别字)你会发现性能是非常缓慢的,所以你得在列上做索引,现在你有一个50字节宽的索引键而不是3个字节的日期数据类型,这样会使索引效率更低。

关于这样的例子数不胜数,你会遇到一些问题,并且你试图做的一个格式化,通过使用varchar数据类型的DATETIME或DATE,使数据看起来很漂亮。这种事情经常发生,尤其是在刚刚开始。规则应该很简单,使用正确的数据类型来收集数据。然而,这样很容易分心和被推动。把它放在这种格式上,你能做到这点的唯一办法是通过更改数据类型。

花时间去理解处理数据类型的含义。这不仅仅是日期和时间所导致的问题。很多的东西可以很容易地塞进varchar字段,更准确的说应该是整数或小数或其他数据类型。它能够与业务做很好的沟通,使他们明白不仅仅是困难,你想要保护的是功能和数据的完整性。显示如何使用客户端工具进行格式化。这个决定将能解释所有下游问题。然后,使用正确的数据类型来存储信息。

原文:Use the Correct Data Type

继续阅读