0

I currently have this fragment as part of a larger query. It works but I'd like to simply the nested string functions and the duplicated substring calls within the CASE statement.

SELECT
  split_part(
    convert_from(
      decode(
        CASE WHEN char_length(substring(pr.modifications, 'eid=([^&]+)')) IN (74,50) THEN
          substring(pr.modifications, 'eid=([^&]+)') || '=='
        ELSE
          substring(pr.modifications, 'eid=([^&]+)')
        END, 'base64'), 
      'UTF8'), 
    ' ', 1) AS calendar_event_id;

Here is a test case:

SELECT
  split_part(
    convert_from(
      decode(
        CASE WHEN char_length('ZmJ0OXQyMTQwa2V0Z3Y5bjZra2I4amVzZjggOHU0ZDc2Zmk5Z2wyc3RxMnQ4a2hrcGd0MWNAZw') IN (74,50) THEN
          'ZmJ0OXQyMTQwa2V0Z3Y5bjZra2I4amVzZjggOHU0ZDc2Zmk5Z2wyc3RxMnQ4a2hrcGd0MWNAZw' || '=='
        ELSE
          'ZmJ0OXQyMTQwa2V0Z3Y5bjZra2I4amVzZjggOHU0ZDc2Zmk5Z2wyc3RxMnQ4a2hrcGd0MWNAZw'
        END, 'base64'), 
      'UTF8'), 
    ' ', 1) AS calendar_event_id;
-- Output:
-- fbt9t2140ketgv9n6kkb8jesf8

I've tried several alternatives, but all I get are syntax errors.

1 Answer 1

1

Try a CTE:

WITH mystr AS (
   SELECT substring(pr.modifications, 'eid=([^&]+)') AS s
)
SELECT
  split_part(
    convert_from(
      decode(
        CASE WHEN char_length(s) IN (74,50) THEN
          s || '=='
        ELSE
          s
        END, 'base64'), 
      'UTF8'), 
    ' ', 1) AS calendar_event_id
FROM mystr;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.