I have the following table:
x y 1 1 1 0 1 null 0 1 0 0 0 null null 1 null 0 null null
And I want to produce the following column:
z 11 10 1null 01 00 0null null1 null0 nullnull
But I’m having difficulty dealing with the rounding that occurs when using coalesce to convert potential null values to 'null'. Trying this:
select concat(cast(coalesce(x, 'null') as int), cast(coalesce(y, 'null') as int))
Gives me the error Numeric value 'null' is not recognized. Even a simple select concat(cast(x as char), cast(y as char)) doesn’t produce the desired results, although no error occurs.
Technically, the following works (using REGEXP_REPLACE). But this seems a bit hacky. Is there a better documented way of doing this?
select regexp_replace(concat(case when x is null then 'null' else x end, case when y is null then 'null' else y end), '.[0]+', '')
Advertisement
Answer
Your value are strings, not ints. So, convert them to the right type:
select concat(coalesce(cast(x as varchar(255)), 'null'),
coalesce(cast(y as varchar(255)), 'null')
)
Note: Not all databases support varchar(255) in this context and need something like string or char.