Sql server 2008 如何在Microsoft SQL server中从一种日期格式转换为另一种日期格式?

Sql server 2008 如何在Microsoft SQL server中从一种日期格式转换为另一种日期格式?,sql-server-2008,Sql Server 2008,我有一个以“MM/DD/YYYY”(101)格式存储的日期,我想将其转换为“DD/MM/YYYY”(103)。源日期(101格式的日期)最初存储为varchar,因此我猜您首先需要将其转换为日期类型,然后再更改其格式 所以实际上我的问题是,“如何更改存储为varchar的日期格式?”是您的朋友。请特别查看日期格式代码。试试这个 select CONVERT(varchar(10), CONVERT(datetime, '12/31/2011', 101), 103) 如果希望具有日期类型的值,

我有一个以“MM/DD/YYYY”(101)格式存储的日期,我想将其转换为“DD/MM/YYYY”(103)。源日期(101格式的日期)最初存储为varchar,因此我猜您首先需要将其转换为日期类型,然后再更改其格式

所以实际上我的问题是,“如何更改存储为varchar的日期格式?”

是您的朋友。请特别查看日期格式代码。

试试这个

select CONVERT(varchar(10), CONVERT(datetime, '12/31/2011', 101), 103)

如果希望具有日期类型的值,则不需要使用另一个强制转换来包装整个转换。您可以直接转换/强制转换它,就像

select CONVERT(date, CONVERT(datetime, '12/31/2011', 101))


我使用Leon Tayson的答案修复了一个具有混合日期格式的字段,使用此位置的代码:


如果它是一个
DATETIME
,为什么会存储为
VARCHAR
??最后,我希望有一个DATE类型的值。所以我所做的是,我用一个CAST包装了整个转换,但结果是YYYY-MM-DD格式的日期。选择CAST(CONVERT(VARCHAR(10),CONVERT(DATETIME,'12/31/2011',101),103)作为日期),但这满足了您最初的要求,对吗?实际上,我的问题是,“如何更改存储为varchar的日期格式?”。因此,实际上,我使用SSIS包将数据从excel文件导入数据库表。因此,我将导入表中的每一列都设置为varchar(250)类型,以避免SSI和SQL之间的转换问题。
select CONVERT(date, '12/31/2011', 101) 
/**MM-DD-YYYY to YYYY-MM-DD **/
UPDATE [DBO].[TABLE]
   SET [DATEFIELD] = CONVERT(varchar(10), CONVERT(datetime, DATEFIELD, 110), 23)
where DATEFIELD like '__-__-____'

/** excel date serial number to YYYY-MM-DD **/
UPDATE [DBO].[TABLE]
   SET [DATEFIELD] = dateadd(DAY, convert(bigint, DATEFIELD) , convert(date, '1-1-1900'))
 Where Len(UPDATED_DATE) = 5

/** YYYY to YYYY-MM-DD **/
UPDATE [DBO].[TABLE]
SET [DATEFIELD] = DATEFIELD + '-01-01'
Where Len(DATEFIELD) = 4