65.9K
CodeProject 正在变化。 阅读更多。
Home

使用选择查询进行本地化日期时间格式化

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

8685

引言:何时以及如何使用 SQL 格式化函数来格式化日期时间值,以便在目标运行的应用程序中使用。

引言

何时以及如何使用 SQL 格式化函数来格式化日期时间值,以便在目标运行于不同区域设置和文化环境的应用程序中使用。


问题陈述

如果 TimeTable 的模式如下:

活动 开始日期 开始时间

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

会议 03/02/2008 00:00:00 01/01/1900 14:30:25

午休 03/02/2008 00:00:00 01/01/1900 17:15:00


现在,需求是使用 SELECT 查询在一个新字段中获取开始日期和开始时间的 (03/02/2008 14:30:25) 值的总和,可以使用 CAST/CONVERT 函数如下:


SELECT StartDate,StartTime,cast((convert(varchar,StartDate,101) + space(1) + convert(varchar,StartTime,8)) as Datetime) as Datetime FROM [TimeTable]


在编写 SQL 查询时,为了将日期和时间添加到一起以创建一个包含组合日期时间的字段,应该注意使用 CAST & CONVERT 函数,如以下所示。日期时间字段用于日期时间计算或更新其他业务对象的状态,因此可能会产生错误的结果或日期时间格式与字段不匹配。


此查询无论当前区域设置如何,都会以美国格式 (mm/dd/yyyy) 在日期时间字段中返回日期值,因此日期格式与结果集中的其他日期时间类型字段 (StartDate,StartTime) 不匹配。


解决方案

.NET 框架提供了一个基础类库来有效地操作日期时间类型的值。虽然使用 .Net 框架内置对象和方法可以修复不匹配,但当日期和时间字段直接在业务逻辑或领域模型实体中使用时,效率不高。


相反,我们可以使用 DATEADD 和 DATEPART SQL 方法来创建一个包含日期和时间加法值的日期时间字段。它以当前选择的区域设置返回日期时间字段,从而减少了区域设置日期格式不匹配的问题。

SELECT StartDate,StartTime,dateadd(hh,datepart(hh,StartTime),dateadd(mi,datepart(mi,StartTime),dateadd(ss,datepart(ss,StartTime),StartDate))) as Datetime FROM [TimeTable]

摘要

使用 dateadd、datepart 函数编写查询将根据执行查询的文化环境有效地格式化日期时间值。这将减少在代码端将其转换为正确格式的额外工作,从而减少容易出错的实现。

© . All rights reserved.