子查询返回超过 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