Varchar值为日期格式

时间:2017-07-26 14:00:43

标签: sql sql-server

在SQL Server 2014中,我有一个varchar列,其中包含多种日期格式:

shipdate
-----------
12/29/2014      -- mm/dd/yyyy
5/20/15         -- mm/dd/yy
2012/05/22      -- yyyy/mm/dd

我想将它们转换为YYYY/MM/DD日期格式,但我不能,我尝试过:

CAST(SRD.[ShipDate] AS DATEtime)

没有成功。

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

嗯,嗯。 。 。你真的想把日期存储为日期。在您的情况下,您可以使用try_convert()并继续测试,直到它起作用:

select coalesce(try_convert(date, shipdate),
                try_convert(date, shipdate, 1),
                try_convert(date, shipdate, 101)
               ) as presumed_date

答案 1 :(得分:0)

CONVERT可以正常工作,但风格需要为111.

SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATETIME),111);

您的代码示例显示日期,但没有时间;另外,我没有看到你想根据你的问题看到时间。因此,我建议您实际将其转换为DATE而不是DATETIME - 如下面的查询所示。

SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATE),111);

答案 2 :(得分:0)

SELECT CONVERT(VARCHAR(10),CAST(SRD.[ShipDate] AS DATE),111);

这应该有效,因为你寻找的风格是111

答案 3 :(得分:-1)

目前尚不清楚您是在尝试在查询中执行此操作还是尝试将数据迁移到其他列,因此下面的示例需要填写并添加到您的特定需求中。 (替换......适合)。您可以应用特定格式并使用try convert。然后多次遍历数据集以捕获所有值。:

    SET DATEFORMAT mdy;  
    -- ... 
    TRY_CONVERT(datetime2, [ShipDate]) AS Result;
    -- ...  
    GO

    SET DATEFORMAT dmy;
    -- ... 
    TRY_CONVERT(datetime2, [ShipDate]) AS Result;
    -- ...
    GO

    -- ...