日期格式值在更新后未从以前的格式更新为新格式



当我将日期格式为 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/

最新更新