使用SQL Server中的格式将nvarchar强制转换为最新版本

使用SQL Server中的格式将nvarchar强制转换为最新版本,sql,casting,sql-server-2012,Sql,Casting,Sql Server 2012,我正在使用SQLServerManagementStudio。我的数据库中有一个表,其中包含存储为nvarchar(255)的日期。我想将此表的数据迁移到一个新表中,我称之为转换的_日期,并将此数据存储为日期。另外,我希望它们的格式都是这样的YYYY-MM-DD 当前日期表如下所示: **Dates** 15/6/2011 16/6/2011 2013-03-30 2013-04-16 ... **Converted_Dates** 2011-06-15 2011-06-16 2013-03

我正在使用SQLServerManagementStudio。我的数据库中有一个表,其中包含存储为nvarchar(255)的日期。我想将此表的数据迁移到一个新表中,我称之为转换的_日期,并将此数据存储为日期。另外,我希望它们的格式都是这样的YYYY-MM-DD

当前日期表如下所示:

**Dates**
15/6/2011 
16/6/2011
2013-03-30
2013-04-16
...
**Converted_Dates**
2011-06-15
2011-06-16
2013-03-30
2013-04-16
...
我希望新表如下所示:

**Dates**
15/6/2011 
16/6/2011
2013-03-30
2013-04-16
...
**Converted_Dates**
2011-06-15
2011-06-16
2013-03-30
2013-04-16
...
我执行此查询,但日期的格式保持不变,只是数据类型从nvarchar(255)更改为date


关于如何以首选格式将数据从旧表转换为新表,有什么建议吗?

sql server中未以格式存储
date
datetime
数据类型的值。如果希望以不同的格式查看日期,则可以使用一些内置函数,在转换为
varchar
(或
nvarchar
nchar
char
)数据类型时,操纵日期和日期时间数据类型的显示方式

您应该将日期存储为
date
数据类型,如果可以在应用程序级别对其进行格式化,请在应用程序级别进行格式化。如果必须在sql中格式化它们,请使用

返回:
2017-05-01


在sql server 2012+中,您可以使用

返回:
2017-05-01


但是
format()
要慢得多,请看这里:

数据库中的日期不是以您定义的格式存储的。它们只存储为日期。现在,日期在服务器/机器/客户机上的显示方式取决于客户机的设置。您可以更改它,但它不会更改存储在数据库中的日期格式。请尝试将
where isDate(dates)=1
添加到现有查询中。由于该问题涉及将字符串转换为日期,因此被否决。这个答案是关于将日期转换为字符串的。@DanBracuk I将日期存储为字符串(如中所述,不要这样做),建议在何处和何时格式化日期,以及如何在必要时在sql中格式化日期。OP已成功将字符串转换为
日期
数据类型,但希望日期具有“首选格式”。尽管投了反对票,我仍然坚持我的答案:很明显,我们中有一个人没有读到这个问题。显然是我。很抱歉。否决票被撤回。@DanBracuk不必担心。谢谢你评论你为什么投了否决票,这给了我一个回应的机会。
select format(getdate(),'yyyy-MM-dd')