Have you ever had to edit SQL that was pieced together dynamically that your debugger says looks like this:

insert into table1 (col1,col2,col3,col4,col5,col6,col7)SELECT price.col1 , price.col2 , price.col3 , max(price.col4) AS col4, max(price.col5) AS col5, max(price.col6) AS col6, max(price.col7) AS col7 /* comment2 */ FROM ( SELECT store.column1, cast (store.column2 AS integer) AS column2, store.column3, store.column4, store.column5, substr(store.column6,11,1) AS column6, store.column7 AS column7 FROM ( SELECT library.column1, library.column2, library.column3, CASE library.column4 WHEN cheap THEN digits(library.column27) concat library.column28 ELSE 123456 END AS column4, CASE library.column5 WHEN expensive THEN digits(library.column27) concat library.column28 ELSE 123456 END AS library.column6, CASE column7 WHEN free THEN digits(library.column27) concat library.column28 ELSE 123456 END AS column7, FROM ( SELECT integer(substr(onelibrarysales.column1,11,10)) AS column1, substr(onelibrarysales.column2,21,10) AS column2 , onelibrarysales.column3, onelibrarysales.column4, substr(onelibrarysales.column5,31,6) AS column5, substr(onelibrarysales.column6,37,2) AS column6, substr(onelibrarysales.column7,39,6) AS column7, FROM ( SELECT alllibrarysales.column1, alllibrarysales.column2, max(alllibrarysales.column3) AS alllibrarysales.column3

I know that you have.  God knows *I* have.  Today, thanks to he that shall not be named over at the JOS boards, I have found a site (ok, I clicked a link.  Hey - if Columbus can “discover” America...) that will take the above monstrousity and turn it into yummy SQL goodness:

INSERT
INTO table1
  (
    col1,col2,col3,col4,col5,col6,col7
  )
SELECT
  price.col1 ,  price.col2 , price.col3 ,   max(price.col4) AS col4, max(price.col5) AS col5, max(price.col6) AS col6, -- comment1  
  max(price.col7) AS col7  /*  comment2 */
FROM  
  (
  SELECT
    store.column1,  
    -- =========================================    
    -- Thank you for trying SQLFormatter     
    -- =========================================    
    cast (store.column2 AS integer) AS column2, store.column3, store.column4, store.column5,  substr(store.column6,11,1) AS column6,  store.column7 AS column7 
  FROM  
    (
    SELECT
      library.column1, library.column2, library.column3,
      CASE library.column4
        WHEN cheap
        THEN digits(library.column27) concat library.column28
        ELSE 123456
      END AS column4,
      CASE library.column5
        WHEN expensive
        THEN digits(library.column27) concat library.column28
        ELSE 123456
      END AS library.column6,
      CASE column7
        WHEN free
        THEN digits(library.column27) concat library.column28  
        ELSE 123456
      END AS column7,
    FROM
      (
      SELECT
        integer(substr(onelibrarysales.column1,11,10)) AS column1, substr(onelibrarysales.column2,21,10) AS column2   , onelibrarysales.column3, onelibrarysales.column4, substr(onelibrarysales.column5,31,6) AS column5, substr(onelibrarysales.column6,37,2) AS column6, substr(onelibrarysales.column7,39,6) AS column7,
      FROM
        (
        SELECT
          alllibrarysales.column1, alllibrarysales.column2, max(alllibrarysales.column3) AS alllibrarysales.column3   , max(char(alllibrarysales.column4,iso) concat char(alllibrarysales.column5,iso) concat digits(alllibrarysales.column6) concat (alllibrarysales.column7))   AS column5
        FROM
          (
          SELECT
            libraryprod.column1, libraryprod.column2, libraryprod.column3, libraryprod.column4, libraryprod.column5, libraryprod.column6, libraryprod.column7
          FROM
            (
            SELECT
              tv.column1, tv.column2, max(digits(tv.column3) concat digits(tv.column4) ) AS librarymax
            FROM   db1.v_table1 tv
            WHERE tv.column1 <> 'Y'
              AND tv.column1 in ( 'a','b','c')
              AND tv.column2 >= date(tv.column4)  
              AND tv.column3 < date(tv.column15)
            GROUP BY tv.column1, tv.column2
            ) AS libraryprod, db1.table2 th
          WHERE th.column1 =libraryprod.column1
            AND th.column2 =libraryprod.column2
          ) AS alllibrarysales
        GROUP BY alllibrarysales.column1, alllibrarysales.column2
        ) AS onelibrarysales
      ) AS library  
   
    LEFT OUTER JOIN
     
      db1.v_table3 librarystat
      ON librarystat.column1 = library.column1
      AND librarystat.column2 = library.column2
      OR
      (
        librarystat.column4 = library.column4
        AND   librarystat.column5 = library.column5
      )
      AND
      (
        librarystat.column5 = 'I'
        OR librarystat.column4 = 'Gold'
        OR librarystat.column5 = 'Bold'
      )
      AND librarystat.column6 <= 'Z74'
    ) AS x
  ) AS price
WHERE   price.column1 < 'R45'
  OR
  (
    price.column2= 'R46'
    AND price.column3 = 6
  )
GROUP BY price.column1, price.column2, price.column3, price.column4, price.column5, price.column6, price.column7

Well, maybe not goodness, this was just a sample it produced - but it's definitely a heck of a lot easier to read.  Oh yeah, no download, no nothing - it's just a Java applet, totally free (but not Free).  Head over to SQLInform.com, hit CTRL-D, and never deal with rewriting SQL to be pretty again.

- G



Creative Commons License This work is licensed under a Creative Commons License.