有没有办法在 SQL Server 中将日期格式化为 MM DD YYYY 而不是 YYYYMMDD? [复制]

Posted

技术标签:

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

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

【问题讨论】:

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

以上是关于有没有办法在 SQL Server 中将日期格式化为 MM DD YYYY 而不是 YYYYMMDD? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中将字符串转换为日期

如何在 SQL Server中 将日期格式化

在 PHP Laravel 中的 SQL Server 中将字符串转换为日期数据类型

在 SQL Server 存储过程中验证日期参数

如何在 SQL Server 中将字符串转换为日期时间?

SQL Server:如何设置返回格式?