【发布时间】:2021-12-22 03:48:32
【问题描述】:
我在 Azure Synapse 中有一张表,如下所示,
想要将 Enrolled_period 列查询为 2 个不同的列作为 DATE 数据类型。
我正在尝试以下查询
select convert(varchar, SUBSTRING(enrolled_period, 2, 12), 23) as startdate
from dbo.test_period;
也尝试拆分数据
select
REPLACE(PARSENAME(REPLACE(enrolled_period, ', ', '.'), 2), '(', '') AS startdate,
REPLACE(PARSENAME(REPLACE(enrolled_period, ', ', '.'), 1), ')', '') AS enddate
from dbo.test_period
但出现错误
从字符串转换日期和/或时间时转换失败。
我该如何解决这个问题?
【问题讨论】:
-
enrolled_period是什么数据类型?另外,请注意日期文字周围有'表示它们是字符串(需要转换为日期),字符串本身不应包含'字符。所以,你想要从字符 3 开始的 10 个字符,而不是从字符 2 开始的 12 个字符。然后你想 CAST/COVERT 到一个日期,而不是一个 VARCHAR。 -
我们正在将数据从 teradata 迁移到 Synapse。 Teradata(bteq) 具有称为周期的数据类型。那是登记的_时期列是。但是在 Synapse(t-sql) 中不支持 period 数据类型。所以将其存储为字符串
-
最好将其存储为两个日期列。退回以字符串表示形式存储数据总是充满问题。尽可能避免它。
标签: tsql casting type-conversion azure-synapse