这个查询返回:
这个示例为日期减少6个月:
这个查询返回:
这个示例为日期增加50天:
这个查询返回:
这个示例为日期和时间减少30分钟:
这个查询返回:
解析
这个技巧演示了使用DATEADD函数根据不同的粒度来修改日期。对于前面的每个示例来说DATEADD的第三个参数都是文本日期值。然而,你也可以引用datetime数据类型表列或有效的日期表达式。
你会在下面的技巧中看到,第一个参数detepart也能在不同的日期函数中使用。
8.5.3 找出两个日期的差
DATEDIFF让第二个日期减去第一个日期,产生一个指定的datepart代码格式的值。DATEDIFF的语法是:
第一个datepart代码使用和DATEADD相同的datepart代码。第二个和第三个参数是参与减法的日期值。
本例演示了如何使用DATEDIFF函数来找出两个日期的差:
找出当前时间和EndDate之间的差
这个查询返回下面的(部分)结果:
解析
在这个技巧中,我们计算ProductCostHistory表的EndDate和当前日期的差,以月返回这个差。
8.5.4 显示日期一部分的字符串值
DATENAME返回的字符串是datepart代码指定的日期中的一部分。语法是:
第二个参数指定了字符串值基于的日期。
在这个技巧中,我会演示如何使用DATENAME返回datetime值的指定部分的字符串值:
显示EndDate这天为星期几
这个查询返回下面的(部分)结果:
解析
在这个技巧中,datepart参数设置成dw(星期几),结果根据EndDa
te列日期返回了星期几的值。
8.5.5 使用DATEPART显示日期一部分的整数值
这个函数根据datepart指定的部分日期返回整数值。DATEPART语法是:
第二个参数date指定了要计算整数值的日期。
这个示例演示了如何根据选择的日期部分返回整数值。第一个示例返回年值:
这个查询返回:
下一个示例显示当前月份的整数值:
这个查询返回:
解析
在这个技巧中,我们使用DATEPART函数从当前日期和时间中提取年、月和日整数值。你也可以使用不需要datepart参数的封装好的函数来显示这些值,下面的技巧会说。
8.5.6 使用YEAR、MONTH和DAY显示日期部分的整数值
你可以使用单个参数函数来显示日、月和年的整数值: 这个示例返回当前年:
这个查询返回:
这个示例返回当前月:
这个查询返回:
这个示例返回当前日:
这个查询返回:
解析
在这个技巧中,我演示了单个参数的日期函数。DAY返回日的整数值,MONTH返回表示月的整数,YEAR返回表示计算日期的年的整数。
8.6 使用Convert和Cast转换数据类型
CONVERT和CAST函数都是用来将多个数据类型从一种类型转换为另一种类型。CAST的语法是:
第一个参数是要转换的表达式(例如一个表列或文本值)。第二个参数是要转换成的数据类型。 CONVERT的语法是:
第一个参数是要转换成的数据类型。第二个参数是需要转换的表达式。第三个参数style允许我们配置某个日期呈现的格式。
8.6.1 转换数据类型
在这个技巧中,我会演示如何将整数数据类型转换为char(4)数据类型。在第一个示例中,把整数与字符串拼接:
这个查询返回下面的错误:
消息245,级别16,状态1,第1行
在将varchar值'Cannot be concatenated'转换成数据类型int时失败。
在下面的示例中,使用CONVERT来将整数值变为字符数据类型:
这个查询返回:
这个示例演示了使用CAST进行相同类型的转换:
这个查询返回下面的(部分)结果:
解析
第一个查询试图把整数和字符串值拼接在一起。这将会出现一个错误,因为两个数据类型必须是兼容的或者是一致的。第二次尝试使用CONVERT在把表达式和其他字符串拼接前修改表达式的数据类型为char(4)。CAST用来转换smallint列的数据类型,这样就能把它与字符串进行拼接。
8.6.2 进行数据转换
我前面提到过,CONVERT有一个可选的样式参数,它允许你转换datetime或smalldatetime为指定的字符格式。许多人很疑惑日期和时间是如何存储以和查