On 2016/01/16 7:02 AM, audio muze wrote:
>> What do you mean by "parse" ?  Just to separate a string into its delimited 
>> substrings ?  Since SQLite has no array or list variable-type there's no way 
>> to do that because there's no way to return the result.  Can you not just 
>> return the value retrieved from the table and parse it in your software ?
>>
>> You can add your own functions to SQLite, so you could write your own parse 
>> function and do something like
>>
>> SELECT parse(myColumn) FROM myTable
>>
>> However this is quite complicated and not recommended for the beginner.
> The fields in question have content as follows:
> string1\\string2\\string3\\...\\stringx
>
> I want to write every record's entries to a table with each element
> being a separate record i.e.
>
> string1
> string2
> string3
> .
> .
> .
> stringx

There is of course no SQL function to do this, but thanks to CTE we can 
achieve it easily (though not extremely efficiently).

I have posted some time ago here some CTE query to break CSV values in a 
field up into their own items, I will post it now again from one of 
SQLitespeed tutorial scripts, it's an easy adaption to use those slashes 
(or whatever other separator character(s) you use).

I will leave the adaption to you since I am unsure if your post is just 
an example or whether the actual separators are in fact slashes - but if 
you have difficulty adapting it, please post again with more detail and 
we will try to assist better.



--   Example Script for un-packing CSV values (or any delimited data).
--   [ Needs CTE: SQLite 3.4+ ]
--
--   Remove any auto-created Tables
-- 
DROP TABLE IF EXISTS tmpcsv;

--
--   Create & Populate the Table used in the examples
--
CREATE TABLE tmpcsv (
   ID INTEGER PRIMARY KEY,
   colA TEXT,
   colCSV TEXT
);

--
--   Insert example CSV data
--
INSERT INTO tmpcsv (ID, colA, colCSV) VALUES
     (1, 'foo', '4,66,51,3009,2,678')
   , (2, 'bar', 'Sputnik,Discovery')
   , (3, 'baz', '101,I-95,104')
   , (4,'foz','Amsterdam, Beijing, London, Moscow, New York, Paris, Tokyo')
;

--   This CTE Query works only on the Table above, but will run in any
--   SQLite script engine.
--
--   You will need to modify the table (t) and Key (t.ColA) and column
--   containing the separated data (t.colCSV in this case).
-- 
--   You may modify the separation character (comma in this case) by
--   replacing all  ','  with either another quoted character (such
--   as '#', ';' or '|') or using the CHAR(UnicodeVal) function (for
--   example CHAR(09) for TAB or CHAR(32) for SPACE, etc.)
-- 
WITH csvrec(i, l, c, r) AS (
       SELECT t.colA, 1,
              t.colCSV||',', ''
         FROM tmpcsv AS t
        WHERE 1
     UNION ALL
       SELECT i,
              instr( c, ',' ) AS vLength,
              substr( c, instr( c, ',' ) + 1) AS vRemainder,
              trim( substr( c, 1, instr( c, ',' ) - 1) ) AS vCSV
         FROM csvrec
        WHERE vLength > 0
     )
   SELECT t.ID, t.colA, cr.r AS colCSV FROM tmpcsv AS t, csvrec AS cr
   WHERE t.colA = cr.i AND cr.r <> ''
   ORDER BY t.ID, t.colA
;

   --  ID   |    colA   |   colCSV
   -- ===   |   =====   |   ===========
   --  1    |    foo    |   2
   --  1    |    foo    |   3009
   --  1    |    foo    |   4
   --  1    |    foo    |   51
   --  1    |    foo    |   66
   --  1    |    foo    |   678
   --  2    |    bar    |   Discovery
   --  2    |    bar    |   Sputnik
   --  3    |    baz    |   101
   --  3    |    baz    |   104
   --  3    |    baz    |   I-95
   --  4    |    foz    |   Amsterdam
   --  4    |    foz    |   Beijing
   --  4    |    foz    |   London
   --  4    |    foz    |   Moscow
   --  4    |    foz    |   New York
   --  4    |    foz    |   Paris
   --  4    |    foz    |   Tokyo

--
--   Example Cleanup
--
DROP TABLE IF EXISTS tmpcsv;

   --   Script Stats: Total Script Execution Time:     0d 00h 00m and 
00.037s
   --                 Total Script Query Time:         0d 00h 00m and 
00.012s
   --                 Total Database Rows Changed:     4
   --                 Total Virtual-Machine Steps:     1196
   --                 Last executed Item Index:        5
   --                 Last Script Error:
   -- 
------------------------------------------------------------------------------------------------

   -- 2015-04-09 17:14:51.419  |  [Success]    Script Success.
   -- 2015-04-09 17:14:51.421  |  [Success]    Transaction Rolled back.
   -- -------  DB-Engine Logs (Contains logged information from all DB 
connections during run)  ------
   -- [2015-04-09 17:14:51.369] APPLICATION : Script 
D:\Documents\SQLiteScripts\csv_unpack.sql started at 17:14:51.369 on 09 
April.
   -- [2015-04-09 17:14:51.415] ERROR (284) : automatic index on csvrec(i)
   -- 
================================================================================================





Reply via email to