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
不同的名称。 timestamp
是 rowversion
的 弃用 同义词,因此它的使用会让人很困惑;特别是 rowversion
不是日期和时间值,而是 binary
值,并且 不能 转换为日期和时间数据类型。
我有 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
不同的名称。 timestamp
是 rowversion
的 弃用 同义词,因此它的使用会让人很困惑;特别是 rowversion
不是日期和时间值,而是 binary
值,并且 不能 转换为日期和时间数据类型。