Subject | Re: [ib-support] Re: SELECT ... WHERE ... LIKE ... question (Firebird 1.02) |
---|---|
Author | Nando Dessena |
Post date | 2003-02-14T18:21:54Z |
Jack,
as Lucas has correctly explained:
dictates that every comparison between char fields/constants of
different length is executed *after* padding the shorter operand with
spaces so it becomes the same length of the longer one.
That's what Firebird does, AFAIK, and that's why
wwyc> SELECT Code FROM <Table> WHERE Code = "01AB"
wwyc> does return this code; in this case SELECT does not have a problem
wwyc> with the 4 or 5 characters (I have tested this to make sure this is
wwyc> correct :-)).
Unfortunately the padding rule does not seem to be applied in case of
LIKE. I'm not knowledgeable enough about the SQL standard to say
whether this is a bug or not, but at least all you are observing has a
decent explaination.
My advice, FWIW, is to only use char columns when all the values are
of the same length, varchar in all the other cases. I see you have 4
character and 5 caharacter values, which would strike me as a source
of headaches if combined with the char datatype, even if I didn't knew
anything about how char padding is done. :-)
Ciao
--
Nando mailto:nandod@...
as Lucas has correctly explained:
>> So asking for a LIKE '__AB' will never get you any resultThe SQL standard, which Firebird follows as much as it's reasonable,
>> back since ALL fields in the char column have a fix
>> length of five and your asking for 4 chars.
dictates that every comparison between char fields/constants of
different length is executed *after* padding the shorter operand with
spaces so it becomes the same length of the longer one.
That's what Firebird does, AFAIK, and that's why
wwyc> SELECT Code FROM <Table> WHERE Code = "01AB"
wwyc> does return this code; in this case SELECT does not have a problem
wwyc> with the 4 or 5 characters (I have tested this to make sure this is
wwyc> correct :-)).
Unfortunately the padding rule does not seem to be applied in case of
LIKE. I'm not knowledgeable enough about the SQL standard to say
whether this is a bug or not, but at least all you are observing has a
decent explaination.
My advice, FWIW, is to only use char columns when all the values are
of the same length, varchar in all the other cases. I see you have 4
character and 5 caharacter values, which would strike me as a source
of headaches if combined with the char datatype, even if I didn't knew
anything about how char padding is done. :-)
Ciao
--
Nando mailto:nandod@...