子查询返回超过 1 个值 - 可能的解决方案?
Subquery returning more than 1 value - possible solution?
我正在将所有 EPOCH/UNIX 时间戳转换为日期时间格式,该格式在执行时可在正常 SELECT
语句中使用,但是,在子查询中它会抛出错误,因为它返回转换后的结果每个 _id
.
的日期
这似乎是一个直接的解决方案,但出于某种原因我无法理解它。
任何帮助将不胜感激。
SELECT
[id] = A._id
,[conId] = A.conId
,[createdAt] = ISNULL(CAST(CASE
WHEN ([createdAt]) = '\N' THEN @defaultDate
WHEN ([createdAt]) = '' THEN @defaultDate
WHEN ([createdAt]) IS NULL THEN @defaultDate
ELSE (SELECT [createdAt] = DATEADD(MS, CAST(createdAt AS BIGINT)%(3600*24*1000),
DATEADD(DAY, CAST(createdAt AS BIGINT)/(3600*24*1000), '1970-01-01 00:00:00.0')) FROM areas)
END AS DATETIME2(7)), @defaultDate)
FROM areas A
我完全不明白为什么您需要子查询,而您似乎只想转换当前行的纪元时间戳。
至于错误处理,我建议使用 try_convert
而不是 case
表达式。最后,您可以使用 coalesce()
.
分配默认值
select id, conid,
coalesce(
dateadd(second, try_convert(bigint, createdat), '19700101'),
@defaultdate
) as createdat
from areas
我正在将所有 EPOCH/UNIX 时间戳转换为日期时间格式,该格式在执行时可在正常 SELECT
语句中使用,但是,在子查询中它会抛出错误,因为它返回转换后的结果每个 _id
.
这似乎是一个直接的解决方案,但出于某种原因我无法理解它。
任何帮助将不胜感激。
SELECT
[id] = A._id
,[conId] = A.conId
,[createdAt] = ISNULL(CAST(CASE
WHEN ([createdAt]) = '\N' THEN @defaultDate
WHEN ([createdAt]) = '' THEN @defaultDate
WHEN ([createdAt]) IS NULL THEN @defaultDate
ELSE (SELECT [createdAt] = DATEADD(MS, CAST(createdAt AS BIGINT)%(3600*24*1000),
DATEADD(DAY, CAST(createdAt AS BIGINT)/(3600*24*1000), '1970-01-01 00:00:00.0')) FROM areas)
END AS DATETIME2(7)), @defaultDate)
FROM areas A
我完全不明白为什么您需要子查询,而您似乎只想转换当前行的纪元时间戳。
至于错误处理,我建议使用 try_convert
而不是 case
表达式。最后,您可以使用 coalesce()
.
select id, conid,
coalesce(
dateadd(second, try_convert(bigint, createdat), '19700101'),
@defaultdate
) as createdat
from areas