I have the following table:
x
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
.