Ниже для BigQuery Standard SQL
#standardSQL
SELECT
IF(
SAFE_CAST(i1 AS INT64) IS NULL,
i2,
IF(SAFE_CAST(i0 AS INT64) IS NULL, i1, NULL)
) ID_VARIABLE
FROM `project.dataset.table`,
UNNEST([STRUCT<i0 STRING, i1 STRING, i2 STRING>(
SPLIT(LINE_ITEM, '_')[OFFSET(0)],
SPLIT(LINE_ITEM, '_')[OFFSET(1)],
SPLIT(LINE_ITEM, '_')[OFFSET(2)]
)])
Если применить к фиктивным данным из вашего вопроса, как показано ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'HM_9991256_RDR_LL_BA_NONE_REDDEAD' LINE_ITEM UNION ALL
SELECT 'HW_1005489_HWA_AA_DG_NONE_HELLOWORLD' UNION ALL
SELECT 'GG_8504807_BBA_CL_OI_NONE_GOODGAME' UNION ALL
SELECT '100_BB_4186482_CGA_IG_NONE_CALIFORNIA' UNION ALL
SELECT '200_HB_48558012_DDA_EV_NONE_EVEONLINE' UNION ALL
SELECT '900_GI_55488941_CA_DV_NONE_BATTLEFIELD'
)
SELECT
IF(
SAFE_CAST(i1 AS INT64) IS NULL,
i2,
IF(SAFE_CAST(i0 AS INT64) IS NULL, i1, NULL)
) ID_VARIABLE
FROM `project.dataset.table`,
UNNEST([STRUCT<i0 STRING, i1 STRING, i2 STRING>(
SPLIT(LINE_ITEM, '_')[OFFSET(0)],
SPLIT(LINE_ITEM, '_')[OFFSET(1)],
SPLIT(LINE_ITEM, '_')[OFFSET(2)]
)])
результат будет таким, как ожидалось:
Row ID_VARIABLE
1 9991256
2 1005489
3 8504807
4 4186482
5 48558012
6 55488941
Если по какой-то причине вы связаны с CASE WHEN
заявлением - ниже должно работать для вас
#standardSQL
SELECT
CASE WHEN REGEXP_CONTAINS(i1, r'[^0-9]') THEN REGEXP_REPLACE(i2, r'[^0-9]', '')
WHEN REGEXP_CONTAINS(i0, r'[^0-9]') THEN REGEXP_REPLACE(i1, r'[^0-9]', '')
END AS ID_VARIABLE
FROM `project.dataset.table`,
UNNEST([STRUCT<i0 STRING, i1 STRING, i2 STRING>(
SPLIT(LINE_ITEM, '_')[OFFSET(0)],
SPLIT(LINE_ITEM, '_')[OFFSET(1)],
SPLIT(LINE_ITEM, '_')[OFFSET(2)]
)])