Re: null vs empty string
От | Frank Bax |
---|---|
Тема | Re: null vs empty string |
Дата | |
Msg-id | BLU0-SMTP4839D736FB06D0007AD6FDACCC0@phx.gbl обсуждение исходный текст |
Ответ на | null vs empty string (Kent Thomas <kent@solarbee.com>) |
Список | pgsql-novice |
Kent Thomas wrote: > I have the following query: > > SELECT * FROM "sales_projects" WHERE (((sales_projects.prospect ILIKE E'%rancho murieta%') OR (sales_projects.prospect_typeILIKE E'%rancho murieta%') OR (sales_projects.application ILIKE E'%rancho murieta%') OR (sales_projects.projectILIKE E'%rancho murieta%') OR (sales_projects.city ILIKE E'%rancho murieta%') OR (sales_projects.stateILIKE E'%rancho murieta%') OR (sales_projects.project_status ILIKE E'%rancho murieta%')) AND (((sales_projects.project_status!= E'Dead') AND (sales_projects.project_status != E'Ordered')) AND ((sales_projects.statusIN (E'Active',E'Expired')) AND (sales_projects.kind = E'Project')))) > > Yes, it is ugly, but that's not the issue. This query returns just one record when I would expect it to return two. Theonly difference in the two records is in the sales_projects.project_status field. One record has an empty string, thesecond has a null value. The NULL value in sales_projects.project_status is not returned. > > Can someone explain why the NULL value in sales_projects.project_status field does not fit this query? Others have already explained this; but they did not mention coalecse() which might be useful for you. > Secondly, can you offer some advice to EXCLUDE records where sales_projects.project_status is Ordered and Dead? You already do this with (sales_projects.project_status != E'Dead') AND (sales_projects.project_status != E'Ordered') As a general rule: "(NOT A) AND (NOT B)" is the same as "NOT (A OR B)" So you could also write: NOT ( (sales_projects.project_status = E'Dead') OR (sales_projects.project_status != E'Ordered') If you wish to avoid some of the "ugly", then try: sales_projects.project_status NOT IN (E'Dead',E'Ordered') Of course, all these examples will still EXCLUDE the NULL values; so perhaps you want this: coalesce(sales_projects.project_status,'') NOT IN (E'Dead',E'Ordered')
В списке pgsql-novice по дате отправления: