作为 ETL 过程的一部分,我需要将 table1(暂存表)中的 varchar 字段复制到 table2(生产表)中的 tinyint 字段,该字段旨在包含一个整数值。但是,在尝试结合以下两个业务需求时,我遇到了一些问题:
如果源 varchar 字段的值为空,那么它将在目标 tinyint 字段中设置为 NULL。为此,我通常会使用 NULLIF。
如果该字段包含无法转换为 tinyint 值的任何内容(例如标点符号、字母或大于 255 的值),则该值将在目标 tinyint 字段中设置为 255。这背后的基本原理是 tinyint 字段永远不会有 255 值,除非有错误——并且将错误设置为 NULL 或 0 是不合适的,因为这些是完全有效的值,我们将无法区分有效输入和错误输入。
我遇到的问题是试图将 NULLIF 与某种 case 语句结合起来。我认为这也许不是正确的做法。对此有什么想法吗?
我相信 Azure 支持TRY_CAST。
以下是三个似乎可以证明您所追求的示例: