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]]** | ||