我有一个
列,它包含不同格式的日期,如
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
的日期列,但无法做到这一点,因为它总是出现错误。
从字符串转换日期和/或时间时,转换失败
如果有人知道如何将这一列转换为具有上述所有指定值的日期列,请帮助。
要将一个
列转换为
,你需要使用T-SQL中的
函数。
nvarchar
DATETIME
CONVERT
这个函数支持一组 "样式"-- 所有这些都在MSDN上有很好的记录 。
如果你的源字符串与这些定义的样式之一相匹配,你可以使用适当的
来从你的字符串中获得一个
。然而,在T-SQL中没有任何 "魔法 "来识别哪种转换样式与你的字符串相匹配--这完全取决于你。
CONVERT
DATETIME
通过这里的查询,你可以列出T-SQL的所有
样式。
CONVERT
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
如果你的字符串符合其中一种样式,你可以这样转换。