当我将日期格式为 MMM DD,YYYY 的表中的列更新为新格式时。格式不会更改为所需的格式,即 YYYY-MM-DD HH:MM:SS。即使更新不同的值,如GETDATE()
.日期将更改,但格式将保持不变。
当前值和列的格式类型为 varchar
到期日
6月 27 2020 12:00AM
所需格式 到期日
2020-06-27 00:00:00.000
更新声明
update TableName
set
DueDate = CAST([DueDate] AS smalldatetime),
LastSyncDateTime = GETDATE()
where CaseGuid = 'DA2CE6A1-0394-463E-8E8D-962F3A24ADC8'
"日期显示格式"和"日期存储格式"之间存在巨大的混淆。非常简短的解释是,您提到的只是客户端显示格式,而SQL Server具有用于存储日期的特定格式(请记住,服务器仅存储零和一(。
您可以使用不同的样式(显示格式的正式名称是 STYLE(将日期插入到表中,并且您可以使用不同的样式在客户端中显示日期,但根据所使用的 DATE 类型,从"SQL Server 角度"来看,它将始终以相同的方式存储。
为了解决您的原始需求,您需要做的就是向服务器提供有关您在客户端(在查询中(使用的样式的信息。这是通过将显式 CONVERT 与第三个参数(即 STYLE(一起使用来完成的。
例如,如果您在客户端使用以色列格式,如 dd/MM/yyyy,那么您应该使用CONVERT(DATE, '27/02/2021', 103)
.
有关不同 STYLE 的更多信息,您可以查看此文档。
注意:如果要以现有样式未涵盖的特定格式显示日期,则可以在查询中使用函数FORMAT((。此函数完全可以灵活地以特定格式返回数据。请记住,此函数将数据作为字符串返回,它将不再是日期。
例如,假设我想使用以下格式:"日:日,月:月,年:年"。因此,如果日期是"27/02/2021",那么我希望得到"天:27,月:02,年:2021"。在这种情况下,请使用以下内容:
DECLARE @D DATE
SET @D = CONVERT(DATE, '27/02/2021', 103) -- convert string to date for storing
select FORMAT(@D, 'Day:dd, Month:MM, Year:yyyy') -- convert date to string for displaying
解决方案使用格式函数
update TableName
set
DueDate = FORMAT (CAST([DueDate] AS smalldatetime),'yyyy-MM-dd HH:mm:ss'),
LastSyncDateTime = GETDATE()
where CaseGuid = 'DA2CE6A1-0394-463E-8E8D-962F3A24ADC8'
https://www.sqlshack.com/a-comprehensive-guide-to-the-sql-format-function/