Cast/Convert nvarchar 到日期时间

Cast/Convert nvarchar to datetime

我有 table:

id   timestamp
1    31.10.2020 16:32:11
2    09.09.2020 09:15:49
3    22.04.2020 02:48:15

Table这些数据量很大。列时间戳是数据类型“nvarchar”。我需要按日期对数据进行排序或在 WHERE 子句中按日期使用约束,因此我需要将“时间戳”转换为日期时间。但我不能。我试过 convert 和 cast 但还是失败了。

有什么建议吗?

谢谢。

您可以使用 convert() 格式 104 显式转换为 datetime

select convert(datetime, '31.10.2020 16:32:11', 104)

修复您的设计,并将列更改为日期和时间数据类型。考虑到您的数据精确到 1 秒,datetime2(0) 在这里似乎是合适的。首先,我们需要将 nvarchar 值的“格式”更改为 ISO 格式。我们将使用 ISO8601 格式 (yyyy-mm-ddThh:mi:ss.mmm),因为它很明确:

UPDATE dbo.YourTable
SET [timestamp] = CONVERT(nvarchar(20),TRY_CONVERT(datetime2(0), [timestamp], 4), 126);

现在您可以 ALTER table 并将数据类型更改为 datetime2(0):

ALTER TABLE dbo.YourTable ALTER COLUMN [timestamp] datetime2(0) NULL;

我还建议您为您的专栏使用与 timestamp 不同的名称。 timestamprowversion 弃用 同义词,因此它的使用会让人很困惑;特别是 rowversion 不是日期和时间值,而是 binary 值,并且 不能 转换为日期和时间数据类型。