将日期转换为英国的Excel



请帮忙,这几个月来一直让我发疯。

我正在从 MS SQL DB 查询数据,该数据库构造不是很好,并且有很多挑战。到目前为止,让我感到困惑的一个特殊挑战是以用户易于理解的格式呈现日期,并被 Excel 识别为日期(而不是文本(

首先,此数据库中的日期存储为 'yyyymmdd' varchar(8(。我想转换为 dd/mm/yyyy(英国格式(。我已经使用许多不同的功能实现了这一点,如下所示......

FORMAT(CAST(20180728 as date, 'dd/MM/yyyy')
CONVERT(date,20180728,120)
SUBSTRING(20180728,7,2) + '/' + SUBSTRING(20180728,5,2) + '/' + SUBSTRING(20180728,1,4)

所有这些都提供了所需的结果,但是在Excel中查看时,它们被视为文本,因此按范围过滤成为一个挑战。

然后我发现了以下功能,它被 Excel 识别为日期,但不是用户友好的显示......

CONVERT(smalldatetime, 20180728, 103)

这将返回格式为 2018-07-28 00:00:00,尽管在我访问过的所有网站上都阅读了代码 103 应该以英国格式返回。

我很感激一旦数据在 excel 中就可以重新格式化,但我试图避免这种情况并直接输入 Excel,没有进一步的用户干扰。

希望得到一个很好的答案

您可以双重转换。首先转换为(small)datetime,正如我在评论中所说,它没有格式1,然后将其转换回所需格式的字符串:

select CONVERT(varchar(10),
CONVERT(smalldatetime,'20180728',112) --This string is yyyymmdd
,103) --I want a string as dd/mm/yyyy

但是,我怀疑如果 Excel 对您的其他一些努力不满意,结果会有很大不同。


1在内部,smalldatetime类型由两个 16 位整数(范围 0-65535(组成。其中之一存储自 1900 年 1 月 1 日以来经过的整天数。另一个存储午夜后的分钟数。精明的人会注意到这个计划浪费了 5 位,但这很简单

认识到,在处理格式设置时,您几乎总是在查看两种数据类型之间的转换,其中一种数据类型是字符串。字符串没有"具有"格式 - 它包含旨在与格式匹配的结果或字符。而另一种数据类型通常也没有"格式"。转换过程本身需要格式。

还要认识到,您通常不会直接查看数据。例如,如果在 SQL Server Management Studio 中运行查询,则看不到数据,而是看到 SSMS 已处理的数据,并且它必须对它将要显示的任何非字符串数据采取的不可避免的步骤之一是将其转换为字符串。它所应用的转换不受您的控制,但重要的是,不要告诉您实际数据是什么

将 excel 中的列更改为日期格式。

最新更新