Как изменить формат дат при использовании ALTER COLUMN для преобразования столбца datetime в varchar? - PullRequest
1 голос
/ 31 августа 2011

У меня есть столбец даты и времени, который мне нужно изменить, чтобы он был столбцом varchar.

Используя приведенное ниже утверждение, получаемые строки имеют следующий формат: «18 января 2010 17:28»

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

Я бы хотел, чтобы строки, созданные в формате yyyyMMdd (вместо 20100118), вместо этого. Есть ли способ сделать это?

Спасибо

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

Плохо, Плохая идея ... никогда не храните даты в столбцах varchar, теперь вы будете получать туда мусор в разных форматах. Кроме того, зачем varchar (16), когда вы хотите yyyyMMdd?

если вы хотите, чтобы вывод был в другом формате, сделайте это на уровне презентации или используйте команду convert

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

2 голосов
/ 31 августа 2011

Попробуйте этот скрипт:

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
...