我有桌子:
id timestamp
1 31.10.2020 16:32:11
2 09.09.2020 09:15:49
3 22.04.2020 02:48:15
表中有大量这些数据。列时间戳是数据类型“ nvarchar”。而且我需要按日期对数据进行排序或在WHERE子句中按日期进行约束,因此我需要将“时间戳”转换为日期时间。但是我不能。我尝试进行转换和转换,但仍然失败。
有什么建议吗?
谢谢。
答案 0 :(得分:2)
您可以使用convert()
格式104明确转换为datetime
:
select convert(datetime, '31.10.2020 16:32:11', 104)
答案 1 :(得分:1)
修复您的设计,然后将列更改为日期和时间数据类型。考虑到您的数据精确到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
表并将数据类型更改为datetime2(0)
:
ALTER TABLE dbo.YourTable ALTER COLUMN [timestamp] datetime2(0) NULL;
我还建议您为列使用不同于timestamp
的名称。 timestamp
是rowversion
的不推荐使用的同义词,因此它的使用可能会使它非常混乱。尤其是因为rowversion
不是日期和时间值,而是binary
值和不能转换为日期和时间数据类型。