一、问题描述
当我们尝试将字符串 'NULL'
直接转换为 BIGINT
时,会遇到 NumberFormatException
,因为 'NULL'
不是一个有效的数字字符串。为了避免这种错误,我们需要在转换之前进行检查。
解决方案
我们可以使用 CASE
语句来实现条件转换。具体步骤如下:
-
使用
CASE
语句进行条件判断:- 检查字符串是否为
'NULL'
, 如果是'NULL'
,则返回0
;否则,将字符串转换为BIGINT
。
- 检查字符串是否为
-
最外层进行
CAST
操作:- 确保整个
CASE
语句的结果被转换为BIGINT
类型。
- 确保整个
示例代码
SELECT
CAST(
CASE
WHEN original_value = 'NULL' THEN 0
ELSE CAST(original_value AS BIGINT)
END
AS BIGINT) AS zmt_id
FROM (
SELECT 'NULL' AS original_value
UNION ALL
SELECT '123' AS original_value
UNION ALL
SELECT '456' AS original_value
) AS test_data;
解释
- 内层
CASE
语句:用于检查original_value
是否为'NULL'
,并根据条件返回0
或将其转换为BIGINT
。 - 外层
CAST
:确保最终结果为BIGINT
类型。