On Fri, 2014-03-21 at 09:35 -0500, Ben Peng wrote:
> Dear sqlite experts,

<disclaimer>I'm far from an "sqlite expert", others should be able to
provide a more authoritive answer</disclaimer>

I think what you want is rather to simply define your own custom
function to implement a custom match.

I think using COLLATE is wrong in this case, because the use case of
COLLATE is generally to implement ORDER BY, or perhaps to build a custom
index (to replace the regular strcmp() like behavior) but what you want
is a rather loose matching algorithm.

If you create a function using sqlite3_create_function(), similar to how
you might define a REGEX function, you might execute a query with:

  SELECT * FROM table WHERE custom_match (table.column, 42) = 0;

And then, lets assume that "custom_match" uses sqlite3_result_int()
to set the result to 0 if there is a match, or -1 if there is no match,
then you should get a match for any row where table.column = 158;42;76

You can of course give more parameters to "custom_match", so that you
can use invocations like this:
  custom_match (GREATER, table.column, 42)
  custom_match (EQUALS, table.column, 42)
  custom_match (LESSER, table.column, 42)

Make sense ?

Cheers,
    -Tristan

> 
> I have an application where data stored in columns can be lists of integers
> (e.g. 158;42;76). I cannot really split such record into multiple records
> (one for 158, one for 42 etc) and I am currently storing them as VARCHAR
> because they represent a complete piece of information. However, when I
> select records, I would like to compare or match any of the values. For
> example, the record could be selected by either
> 
> C > 100 (match 158)
> C < 100 (match 42 and 76)
> C = 42 (match 42)
> 
> From what I have read so far, I could define a special collate function for
> these columns (sqlite3_create_collation etc), but before I jump into the
> details, does anyone know
> 
> 1. Is this the correct way to proceed?
> 2. Has anyone done anything similar so that I do not have to reinvent the
> wheel?
> 
> Thank you very much,
> Bo
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to