【问题标题】:Is there any way to formate dates as MMDDYYYY instead of YYYYMMDD in SQL Server? [duplicate]有没有办法在 SQL Server 中将日期格式化为 MM DD YYYY 而不是 YYYYMMDD? [复制]
【发布时间】:2019-09-11 18:27:41
【问题描述】:

我刚刚将日期设置为 VARCHAR 而不是日期,因为它们需要保持 MMDDYYYY 格式,我想知道是否有更好的方法来执行此操作。标准日期似乎只是作为 YYYYMMDD

【问题讨论】:

  • 为什么首先将DATEs 存储为字符串?
  • 使用标准。仅在输出数据时转换为另一种格式。数据库提供了date 数据类型的功能丢失。您应该利用这一点。
  • 因为我需要它们保持 MMDDYYYY 格式,而默认日期格式将它们存储为 YYYYMMDD。
  • 哇.....日期作为字符串。这是一个非常非常非常糟糕的主意。
  • 我相信您将输出格式与存储混淆了。日期只是一个数字,以整数形式存储在 sql 中。例如,您如何选择在查询中显示日期完全取决于您在前端使用的技术。

标签: sql-server date


【解决方案1】:

将日期存储为数据库中的日期(或日期时间)。您应该在表示层(屏幕上、报告等)中格式化日期。这就是您使用工具的格式化功能以所需格式显示日期的地方。请记住,大多数 DBMS 中的日期都存储为长整数。您的查询工具实际上是将这些值格式化为显示的格式化日期。

这是一个以数字形式显示今天的快速查询:

SELECT 'Yesterday', CAST(DATEADD(DAY, -1, @Today) AS DECIMAL(32,20))
UNION
SELECT 'Today', CAST(@Today AS DECIMAL(32,20))
UNION
SELECT 'Tomorrow', CAST(DATEADD(DAY, 1, @Today) AS DECIMAL(32,20))

输出如下(如果我没记错的话,分数应该代表时间元素):

Today       43717.61447052469200000000
Tomorrow    43718.61447052469200000000
Yesterday   43716.61447052469200000000

这是在SQL Server中转换GETDATE()的presentation的查询级方法:

SELECT CONVERT(VARCHAR, GETDATE(), 110)

输出:

09-11-2019

【讨论】:

  • 但是是否可以将它们存储为另一种日期格式?
  • 重点是,你没有need to。你的眼睛被你的查询工具欺骗了;日期存储为长整数。您的查询工具是formatting 将长整数转换为日期格式。你应该在你的表现层做同样的事情。
  • @SvetlinZarev "TIMESTAMP" 与日期或时间无关。它已被弃用,不应使用。 DATE、TIME、DATETIME 和 DATETIME2 是有效的日期/时间格式。
  • @pmbAustin 你是对的,但我很确定当我写评论时标签不是“sql-serevr”
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2021-05-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多