0

我有一nvarchar列,它包含不同格式的日期,例如

'2/1/2012',
'2/2/12',
'20 01 12',
'20 03 2012',
'20.01.12',
'30.04.2012',
'20jan 12',
'20-MARCH-2012',
'22MARCH2012',
'23 may 2012',
'23-MAR-2012',
'26MAR-2012',
'27TH JAN 4660',
'CHL. Date- 30.01.2012',
'APRIL/12/2012',
'N/A',
'DT.:5/1/12',

现在我想将此列中的数据以格式插入日期列,dd/mm/yyyy但不能这样做,因为它总是给出错误

从字符串转换日期和/或时间时转换失败

如果有人知道如何将此列转换为具有上面定义的所有指定值的日期列,请提供帮助

4

2 回答 2

1

要将nvarchar列转换为DATETIME,您需要使用CONVERTT-SQL 中的函数。

这个函数支持一组“样式”——所有这些都在 MSDN 上有很好的记录

如果您的源字符串与这些定义的样式之一匹配,您可以使用适当的从您的字符串CONVERT中获取 a 。DATETIME然而,在 T-SQL 中没有“魔法”可以识别哪种转换样式与您的字符串匹配——这完全取决于您。

通过这里的查询,您可以列出CONVERTT-SQL 的所有样式:

DECLARE @Today DATETIME = GETDATE()

SELECT
    Default_100 = CONVERT(VARCHAR(50), @Today, 100),
    US_101 = CONVERT(VARCHAR(50), @Today, 101),
    ANSI_102 = CONVERT(VARCHAR(50), @Today, 102),
    BritishFrench_103 = CONVERT(VARCHAR(50), @Today, 103),
    Germany_104 = CONVERT(VARCHAR(50), @Today, 104),
    Italian_105 = CONVERT(VARCHAR(50), @Today, 105),
    Style106 = CONVERT(VARCHAR(50), @Today, 106),
    Style107 = CONVERT(VARCHAR(50), @Today, 107),
    Style108 = CONVERT(VARCHAR(50), @Today, 108),
    Default_with_ms_109 = CONVERT(VARCHAR(50), @Today, 109),
    USA_110 = CONVERT(VARCHAR(50), @Today, 110),
    Japan_111 = CONVERT(VARCHAR(50), @Today, 111),
    ISO_112 = CONVERT(VARCHAR(50), @Today, 112),
    Europe_default_with_ms_113 = CONVERT(VARCHAR(50), @Today, 113),
    Style114 = CONVERT(VARCHAR(50), @Today, 114),
    ODBC_canonical_120 = CONVERT(VARCHAR(50), @Today, 120),
    ODBC_canonical_with_ms_121 = CONVERT(VARCHAR(50), @Today, 121),
    ISO_8601_126 = CONVERT(VARCHAR(50), @Today, 126),
    ISO_8601_with_timezone_Z_127 = CONVERT(VARCHAR(50), @Today, 127),
    Hijri_130 = CONVERT(VARCHAR(50), @Today, 130),
    Hijri_131 = CONVERT(VARCHAR(50), @Today, 131)

如果您的源字符串与任何预定义样式都不匹配 - 您很不走运,并且需要更多的字符串解析和 T-SQL 代码才能将您的字符串转换为有效的DATETIME.

如果您的字符串与其中一种样式匹配,则可以像这样转换它:

DECLARE @Date DATETIME
SET @Date = CONVERT(DATETIME, '30.04.2012', 104)
于 2012-06-19T07:55:56.870 回答
0

最好的方法是编写一个函数,该函数接受字符串并将其转换为明确的日期字符串(yyyy-mm-dd)。然后可以将其转换为日期时间。现在有将各种格式转换为日期格式的神奇方法。

于 2012-06-19T07:48:21.873 回答