要将nvarchar
列转换为DATETIME
,您需要使用CONVERT
T-SQL 中的函数。
这个函数支持一组“样式”——所有这些都在 MSDN 上有很好的记录。
如果您的源字符串与这些定义的样式之一匹配,您可以使用适当的从您的字符串CONVERT
中获取 a 。DATETIME
然而,在 T-SQL 中没有“魔法”可以识别哪种转换样式与您的字符串匹配——这完全取决于您。
通过这里的查询,您可以列出CONVERT
T-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)