使用SQL-Server中的格式将nvarchar转换为日期

时间:2017-05-01 15:56:49

标签: sql casting sql-server-2012

我正在使用SQL Server Management Studio。我的数据库中有一个表包含存储为nvarchar(255)的日期。我想将此表的数据迁移到一个新表,我称之为Converted_Dates并将此数据存储为日期。另外,我希望所有这些都被格式化为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
...

我执行此查询但日期格式保持不变,只有数据类型从nvarchar(255)更改为日期。

    USE [reporting_database]
    GO
    INSERT INTO [dbo].[Converted_Dates]
    SELECT
        cast(Dates as date)


        FROM [dbo].[Dates]
    GO

有关如何以旧格式将数据从旧表转换为新表的任何建议吗?

1 个答案:

答案 0 :(得分:2)

datedatetime数据类型的值不以sql server格式存储。如果您希望以不同的格式查看日期,则可以在转换为varchar(或nvarcharnchar,{{1时操纵日期和日期时间数据类型的显示方式使用一些内置函数的数据类型。

您应该将日期存储为char数据类型,如果您可以在应用程序级别格式化它们,请在那里进行格式化。如果必须在sql中格式化它们,请使用convert() styles

date

返回:select convert(char(10),getdate(),120)

<小时/> 在sql server 2012+中,您可以使用format()

2017-05-01

返回:select format(getdate(),'yyyy-MM-dd')

但是2017-05-01要慢得多,请看一下:format() is nice and all, but… - Aaron Bertrand