CREATE TABLE tmpcsv (
ID INTEGER PRIMARY KEY,
colA TEXT,
colCSV TEXT
);
INSERT INTO tmpcsv (colA, colCSV) VALUES
('foo', '4,66,51,3009,2,678'),
('bar', 'Sputnik,Discovery'),
('baz', '101,I-95,104');
WITH csvrec(i,l,c,r) AS (
SELECT tmpcsv.ID, 1, colCSV||',', '' FROM tmpcsv
UNION ALL
SELECT i,
instr(c,',') AS vLen,
substr(c,instr(c,',')+1) AS vRem,
substr(c,1,instr(c,',')-1) AS vCSV
FROM csvrec
WHERE vLen>0
)
SELECT t.ID, t.colA, rt.r FROM tmpcsv AS t, csvrec AS rt
WHERE t.ID=rt.i AND rt.r<>''
ORDER BY t.ID
LIMIT 100
Results:
ID colA r
--- ---- ---
1 foo 4
1 foo 66
1 foo 51
1 foo 3009
1 foo 2
1 foo 678
2 bar Sputnik
2 bar Discovery
3 baz 101
3 baz I-95
3 baz 104
:)
(PS: The Limit is not strictly necessary, but advised during testing to avoid
accidental eternal loops).
On 2014/04/04 23:12, peter korinis wrote:
Thanks, Simon.
The database was created by a developer as part of a larger project
involving a mobile app and portal. the portal is written in which calls the
db. so that's where the 'parsing' is done. But unfortunately a SQL alone
cannot provide the data in this case. This portal is in production so we're
not about to rewrite the code with a db redesign.
Does SQL have any string commands, like REGEXP or something else to strip
out the commas, and transform the string into multiple discrete values, then
use those perhaps in a SQL subquery . or something like that?
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users