【问题标题】:Convert Date to UK for ExcelExcel 将日期转换为英国
【发布时间】:2018-08-24 13:25:54
【问题描述】:

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

我正在查询一个 MS SQL 数据库中的数据,该数据库的结构不是很好,而且有很多挑战。到目前为止,让我感到困惑的一个特殊挑战是以用户容易理解并被 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 中,而无需进一步的用户干预。

希望有好的答案

【问题讨论】:

  • smalldatetime(和其他日期时间类型)没有格式。您尝试将 string 转换为 smalldatetime 并告诉它(通过 103)string 已格式化为英国日期时间。你不正确,但它还是成功地进行了转换。
  • 谢谢@DTU,你说我不正确,你对正确的方法有什么建议吗?

标签: sql-server excel date


【解决方案1】:

您可以双重转换。首先转换为 (small)datetime,正如我在 cmets 中所说的,它没有 格式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 位,但它简单

认识到在处理格式化时,您几乎总是在查看两种数据类型之间的转换,其中一种数据类型是字符串。该字符串没有“具有”格式 - 它包含 results 或声称 match 格式的字符。而另一种数据类型通常也没有“格式”。需要格式的是转换过程本身。

还认识到您不经常直接查看数据。如果你例如在 SQL Server Management Studio 中运行查询,您看不到 数据,您看到的是 SSMS 处理过的数据,以及它必须对任何非字符串数据采取的不可避免的步骤之一它将显示是将其转换为字符串。它适用的转换不在您的控制范围内,但重要的是,不要告诉您实际数据是什么

【讨论】:

  • 这是一个非常好的解释,再次感谢@DTU。你是对的,因为我然后转换回字符串 excel 说不。至少我现在对整个事情有了更好的理解。
【解决方案2】:

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

【讨论】:

  • 谢谢,但正如我所说,尽可能避免这种情况
  • 你无法避免。这是 Excel 问题,不是 SQL 问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多