1

我有一个 datetime 列,我需要将其更改为 varchar 列。

使用下面的语句,生成的字符串具有以下格式:“Jan 18 2010 5:28PM”

ALTER TABLE Thinger
ALTER COLUMN LastUpdateDate varchar(16) NOT NULL

我希望生成的字符串具有 yyyyMMdd 格式(给出 20100118)。有没有办法做到这一点?

谢谢

4

2 回答 2

4

糟糕,糟糕的主意......永远不要在 varchar 列中存储日期,现在你会以不同的格式在其中得到垃圾 还有为什么 varchar(16) 当你想要 yyyyMMdd 时?

如果您希望输出采用不同的格式,请在表示层中执行或使用转换

SELECT CONVERT(CHAR(8),GETDATE(),112)

现在如果你真的想做你说你想做的事

运行你的脚本,然后做

UPDATE Table 
SET LastUpdateDate  =  CONVERT(CHAR(8),(CONVERT(DATETIME,CONVERT(varchar,LastUpdateDate))),112)

但是又一次..坏坏坏主意

此外,下一版本的 SQL Server 将使格式化更容易,请参阅:SQL Server Denali CTP3 中的格式化功能

于 2011-08-31T18:31:16.013 回答
2

试试这个脚本:

ALTER TABLE Thinger ADD LastUpdateDateText VARCHAR(16) NOT NULL
GO

UPDATE Thinger SET LastUpdateDateText = CONVERT(VARCHAR(8), LastUpdateDate, 112)
GO

ALTER TABLE Thinger DROP COLUMN LastUpdateDate
GO

sp_RENAME 'Thinger.LastUpdateDateText' , 'LastUpdateDate', 'COLUMN'
GO
于 2011-08-31T18:32:50.703 回答