【发布时间】:2020-09-30 12:17:56
【问题描述】:
当我将日期格式为 MMM DD,YYYY 的表中的列更新为新格式时。格式不会更改为所需的格式,即 YYYY-MM-DD HH:MM:SS。即使更新不同的值,如GETDATE()。日期将更改,但格式将保持不变。
类型为 varchar 的列中的当前值和格式
截止日期
2020 年 6 月 27 日上午 12:00
所需格式 截止日期
2020-06-27 00:00:00.000
更新声明
update TableName
set
DueDate = CAST([DueDate] AS smalldatetime),
LastSyncDateTime = GETDATE()
where CaseGuid = 'DA2CE6A1-0394-463E-8E8D-962F3A24ADC8'
【问题讨论】:
-
感谢@DaleK,是否无法将现有记录更新为新的日期格式?就像描述中提到的那样。
-
@DaleK 不,我可以以任何我想要的格式读取日期。但在这种情况下,我想将现有记录更新为不同的格式。
-
嗨@DaleK。 “日期不以格式存储”是不正确的。事实上,日期与任何其他数据类型一样具有格式。甚至 INT 在磁盘上都有格式。我强烈推荐给read this post as example on what is the exact format of DATETIME2 on the disk(这个高级帖子级别 500 内部)。
-
晚安@Menzi,您似乎对日期显示格式和日期存储格式感到困惑。我有一篇关于这个主题的帖子,名称为“日期显示格式与日期存储格式”。简短的解释是,您提到的只是客户端显示格式,而 SQL Server 具有用于存储日期的特定格式。您可以使用不同的样式将日期插入到表中,并使用不同的样式在客户端显示它,但从“SQL Server 的角度”来看,它将始终以相同的方式存储。
-
@Menzi,为了解决您的原始需求,您只需向服务器提供有关您在客户端(在查询中)使用的样式的信息。这是通过使用带有第三个参数即样式的显式转换来完成的。例如,如果您使用 dd/MM/yyyy 等客户端以色列格式,则使用 CONVERT(DATE, '27/02/2021', 103)。有关不同风格的更多信息,您可以查看this documentation
标签: sql sql-server tsql date datetime