这里的答案对我没有帮助。尽管我在相当简单的更新查询中遇到了类似的问题,如下所示(想法是将 sha-256 编码添加到旧记录中(。
UPDATE
'customer.customers`
SET emailHashCode = (SELECT
TO_HEX(SHA256(e.emailAddress))
FROM
`customer.customers`,
UNNEST(emailAddresses) AS e LIMIT 1)
WHERE emailHashCode IS NULL
我收到此错误:
无法返回相对于 Unix 纪元的无效时间戳值 -62135600400000000 微秒。有效时间戳值的范围为 [0001-01-1 00:00:00, 9999-12-31 23:59:59.999999];写入字段出生日期时出错
表中有一个 dataOfBirth 字段,但它没有被触及。好奇是否缺少一些基本的东西?感谢您提供任何线索!
在跳到时间戳问题之前 - 首先,我想提一下您的初始查询很可能不正确 - 我建议您考虑下面的一个(假设emailAddresses
是重复记录,其中包含emailAddress
字段(
UPDATE 'customer.customers`
SET emailHashCode = (
SELECT TO_HEX(SHA256(e.emailAddress))
FROM UNNEST(emailAddresses) AS e
LIMIT 1
)
WHERE emailHashCode IS NULL
所以,现在回到你的问题:正如 Elliott 提到的 - 你需要更新无效的时间戳作为同一查询的一部分。我还没有测试过 - 但在下面尝试
UPDATE 'customer.customers`
SET emailHashCode = (
SELECT TO_HEX(SHA256(e.emailAddress))
FROM UNNEST(emailAddresses) AS e
LIMIT 1
), dateOfBirth = SAFE_CAST(dateOfBirth AS TIMESTAMP)
WHERE emailHashCode IS NULL
我遇到了同样的问题,最简单的方法是修复所有具有错误dataOfBirth
值的行。
我曾经SAFE_CAST
来做到这一点,请尝试以下操作:
SAFE_CAST(dataOfBirth AS STRING) AS dataOfBirthString
希望对您有所帮助!