This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
admin:features:expressioncols:declaration [2012/02/04 03:04] doc |
admin:features:expressioncols:declaration [2016/06/28 22:38] (current) |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| [[admin:features:expressioncols:home|Overview]] | | [[admin:features:expressioncols:home|Overview]] | | ||
| **[[admin:features:expressioncols:declaration|Declaring Expression-based Columns]]** | | **[[admin:features:expressioncols:declaration|Declaring Expression-based Columns]]** | | ||
| - | [[admin:features:expressioncols:indexing|Indexing Expression-based Columns]] | | + | [[admin:features:expressioncols:optimization|Optimizing Queries]] |
| - | [[admin:features:expressioncols:Optimization]] | + | |
| ---- | ---- | ||
| Line 46: | Line 45: | ||
| ( | ( | ||
| "INDIVIDUAL" CHARACTER(12), | "INDIVIDUAL" CHARACTER(12), | ||
| - | "HOUSEHOLD" CHARACTER(12) omnidex, | + | "HOUSEHOLD" CHARACTER(12), |
| "NAME" CHARACTER(50), | "NAME" CHARACTER(50), | ||
| - | "GENDER" CHARACTER(1) omnidex, | + | "GENDER" CHARACTER(1), |
| - | "BIRTHDATE" ANSI DATE omnidex, | + | "BIRTHDATE" ANSI DATE, |
| "PHONE" CHARACTER(14), | "PHONE" CHARACTER(14), | ||
| "EMAIL" CHARACTER(60), | "EMAIL" CHARACTER(60), | ||
| - | "PHONE_AREACODE" CHARACTER(3) omnidex | + | "PHONE_AREACODE" CHARACTER(3) |
| as "substring(PHONE from 2 for 3)", | as "substring(PHONE from 2 for 3)", | ||
| - | "PHONE_PREFIX" CHARACTER(3) omnidex | + | "PHONE_PREFIX" CHARACTER(3) |
| as "substring(PHONE from 7 for 3)", | as "substring(PHONE from 7 for 3)", | ||
| - | "PHONE_SUFFIX" CHARACTER(4) omnidex | + | "PHONE_SUFFIX" CHARACTER(4) |
| as "substring(PHONE from 11 for 4)", | as "substring(PHONE from 11 for 4)", | ||
| constraint IND_INDIVIDUAL_PK primary ("INDIVIDUAL"), | constraint IND_INDIVIDUAL_PK primary ("INDIVIDUAL"), | ||
| Line 67: | Line 66: | ||
| === Columns with Logic Expressions === | === Columns with Logic Expressions === | ||
| - | Expression-based columns can use logic through the CASE function to conditionally assign values to a column. | + | Expression-based columns can use logic through the CASE function to conditionally assign values to a column. The following example shows two columns that parse the components of an email address: |
| <code> | <code> | ||
| Line 74: | Line 73: | ||
| ( | ( | ||
| "INDIVIDUAL" CHARACTER(12), | "INDIVIDUAL" CHARACTER(12), | ||
| - | "HOUSEHOLD" CHARACTER(12) omnidex, | + | "HOUSEHOLD" CHARACTER(12), |
| "NAME" CHARACTER(50), | "NAME" CHARACTER(50), | ||
| - | "GENDER" CHARACTER(1) omnidex, | + | "GENDER" CHARACTER(1), |
| - | "BIRTHDATE" ANSI DATE omnidex, | + | "BIRTHDATE" ANSI DATE, |
| "PHONE" CHARACTER(14), | "PHONE" CHARACTER(14), | ||
| "EMAIL" CHARACTER(60), | "EMAIL" CHARACTER(60), | ||
| "EMAIL_MAILBOX" CHARACTER(60) quicktext | "EMAIL_MAILBOX" CHARACTER(60) quicktext | ||
| - | as "case when position('@' in EMAIL) > 0 then substring(EMAIL from 1 for position('@' in EMAIL) - 1) else '' end", | + | as "case |
| + | when position('@' in EMAIL) > 0 | ||
| + | then substring(EMAIL from 1 for position('@' in EMAIL) - 1) | ||
| + | else '' | ||
| + | end", | ||
| "EMAIL_DOMAIN" CHARACTER(60) quicktext | "EMAIL_DOMAIN" CHARACTER(60) quicktext | ||
| - | as "case when position('@' in EMAIL) > 0 then substring(EMAIL from position('@' in EMAIL) + 1) else '' end", | + | as "case |
| + | when position('@' in EMAIL) > 0 | ||
| + | then substring(EMAIL from position('@' in EMAIL) + 1) | ||
| + | else '' | ||
| + | end", | ||
| constraint IND_INDIVIDUAL_PK primary ("INDIVIDUAL"), | constraint IND_INDIVIDUAL_PK primary ("INDIVIDUAL"), | ||
| constraint IND_HOUSEHOLD_FK foreign ("HOUSEHOLD") references "HOUSEHOLDS", | constraint IND_HOUSEHOLD_FK foreign ("HOUSEHOLD") references "HOUSEHOLDS", | ||
| Line 93: | Line 100: | ||
| === Columns with Date Expressions === | === Columns with Date Expressions === | ||
| - | Expression-based columns can use date expressions to extract, compare or calculate based on dates. The following example shows columns that calculate and individual's age: | + | Expression-based columns can use date expressions to extract, compare or calculate based on dates. The following example shows columns that calculate an individual's age and age group: |
| + | <code> | ||
| + | create table "INDIVIDUALS" | ||
| + | physical "dat\individuals.dat" | ||
| + | ( | ||
| + | "INDIVIDUAL" CHARACTER(12), | ||
| + | "HOUSEHOLD" CHARACTER(12), | ||
| + | "NAME" CHARACTER(50), | ||
| + | "GENDER" CHARACTER(1), | ||
| + | "BIRTHDATE" ANSI DATE, | ||
| + | "PHONE" CHARACTER(14), | ||
| + | "EMAIL" CHARACTER(60), | ||
| + | "AGE" INTEGER | ||
| + | as "$compare_dates(birthdate, current_date, 'YY')", | ||
| + | "AGE_GROUP" CHARACTER(10) | ||
| + | as "case | ||
| + | when $compare_dates(birthdate, current_date, 'YY') between 0 and 17 | ||
| + | then '0-17' | ||
| + | when $compare_dates(birthdate, current_date, 'YY') between 18 and 29 | ||
| + | then '18-29' | ||
| + | when $compare_dates(birthdate, current_date, 'YY') between 30 and 39 | ||
| + | then '30-39' | ||
| + | when $compare_dates(birthdate, current_date, 'YY') between 40 and 49 | ||
| + | then '40-49' | ||
| + | when $compare_dates(birthdate, current_date, 'YY') between 50 and 59 | ||
| + | then '50-59' | ||
| + | else '60+' | ||
| + | end", | ||
| + | constraint IND_INDIVIDUAL_PK primary ("INDIVIDUAL"), | ||
| + | constraint IND_HOUSEHOLD_FK foreign ("HOUSEHOLD") references "HOUSEHOLDS", | ||
| + | constraint IND_GENDER_FK foreign ("GENDER") references "GENDERS", | ||
| + | ) | ||
| + | in "simple.xml"; | ||
| + | </code> | ||
| Line 109: | Line 149: | ||
| ==== ==== | ==== ==== | ||
| - | **[[admin:features:expressioncols:declaration|Next]]** | + | **[[admin:features:expressioncols:home|Prev]]** | |
| + | **[[admin:features:expressioncols:optimization|Next]]** | ||