Documentation Source Text

Hex Artifact Content
Login

Artifact c5c23cf259a323bedc03353aeef53c69761c525017f2166e7a90349f6b8c7982:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 74 79 70 65 73  <title>Datatypes
0010: 20 49 6e 20 53 51 4c 69 74 65 20 56 65 72 73 69   In SQLite Versi
0020: 6f 6e 20 33 3c 2f 74 69 74 6c 65 3e 0a 3c 74 63  on 3</title>.<tc
0030: 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  l>hd_keywords {d
0040: 61 74 61 74 79 70 65 7d 20 7b 64 79 6e 61 6d 69  atatype} {dynami
0050: 63 20 74 79 70 69 6e 67 7d 3c 2f 74 63 6c 3e 0a  c typing}</tcl>.
0060: 0a 3c 74 61 62 6c 65 5f 6f 66 5f 63 6f 6e 74 65  .<table_of_conte
0070: 6e 74 73 3e 0a 0a 3c 68 31 3e 44 61 74 61 74 79  nts>..<h1>Dataty
0080: 70 65 73 20 49 6e 20 53 51 4c 69 74 65 3c 2f 68  pes In SQLite</h
0090: 31 3e 0a 3c 70 3e 4d 6f 73 74 20 53 51 4c 20 64  1>.<p>Most SQL d
00a0: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
00b0: 28 65 76 65 72 79 20 53 51 4c 20 64 61 74 61 62  (every SQL datab
00c0: 61 73 65 20 65 6e 67 69 6e 65 20 6f 74 68 65 72  ase engine other
00d0: 20 74 68 61 6e 20 53 51 4c 69 74 65 2c 0a 61 73   than SQLite,.as
00e0: 20 66 61 72 20 61 73 20 77 65 20 6b 6e 6f 77 29   far as we know)
00f0: 20 75 73 65 73 20 73 74 61 74 69 63 2c 20 72 69   uses static, ri
0100: 67 69 64 20 74 79 70 69 6e 67 2e 20 20 57 69 74  gid typing.  Wit
0110: 68 20 73 74 61 74 69 63 20 74 79 70 69 6e 67 2c  h static typing,
0120: 20 74 68 65 20 64 61 74 61 74 79 70 65 0a 6f 66   the datatype.of
0130: 20 61 20 76 61 6c 75 65 20 69 73 20 64 65 74 65   a value is dete
0140: 72 6d 69 6e 65 64 20 62 79 20 69 74 73 20 63 6f  rmined by its co
0150: 6e 74 61 69 6e 65 72 20 2d 20 74 68 65 20 70 61  ntainer - the pa
0160: 72 74 69 63 75 6c 61 72 20 63 6f 6c 75 6d 6e 20  rticular column 
0170: 69 6e 0a 77 68 69 63 68 20 74 68 65 20 76 61 6c  in.which the val
0180: 75 65 20 69 73 20 73 74 6f 72 65 64 2e 3c 2f 70  ue is stored.</p
0190: 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 75 73 65  >..<p>SQLite use
01a0: 73 20 61 20 6d 6f 72 65 20 67 65 6e 65 72 61 6c  s a more general
01b0: 20 64 79 6e 61 6d 69 63 20 74 79 70 65 20 73 79   dynamic type sy
01c0: 73 74 65 6d 2e 20 20 49 6e 20 53 51 4c 69 74 65  stem.  In SQLite
01d0: 2c 20 74 68 65 20 64 61 74 61 74 79 70 65 0a 6f  , the datatype.o
01e0: 66 20 61 20 76 61 6c 75 65 20 69 73 20 61 73 73  f a value is ass
01f0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
0200: 20 76 61 6c 75 65 20 69 74 73 65 6c 66 2c 20 6e   value itself, n
0210: 6f 74 20 77 69 74 68 20 69 74 73 20 63 6f 6e 74  ot with its cont
0220: 61 69 6e 65 72 2e 0a 54 68 65 20 64 79 6e 61 6d  ainer..The dynam
0230: 69 63 20 74 79 70 65 20 73 79 73 74 65 6d 20 6f  ic type system o
0240: 66 20 53 51 4c 69 74 65 20 69 73 20 62 61 63 6b  f SQLite is back
0250: 77 61 72 64 73 0a 63 6f 6d 70 61 74 69 62 6c 65  wards.compatible
0260: 20 77 69 74 68 20 74 68 65 20 6d 6f 72 65 20 63   with the more c
0270: 6f 6d 6d 6f 6e 20 73 74 61 74 69 63 20 74 79 70  ommon static typ
0280: 65 20 73 79 73 74 65 6d 73 20 6f 66 20 6f 74 68  e systems of oth
0290: 65 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  er database engi
02a0: 6e 65 73 0a 69 6e 20 74 68 65 20 73 65 6e 73 65  nes.in the sense
02b0: 20 74 68 61 74 20 53 51 4c 20 73 74 61 74 65 6d   that SQL statem
02c0: 65 6e 74 73 20 74 68 61 74 20 77 6f 72 6b 20 6f  ents that work o
02d0: 6e 20 73 74 61 74 69 63 61 6c 6c 79 20 74 79 70  n statically typ
02e0: 65 64 20 64 61 74 61 62 61 73 65 73 20 73 68 6f  ed databases sho
02f0: 75 6c 64 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d  uld.work the sam
0300: 65 20 77 61 79 20 69 6e 20 53 51 4c 69 74 65 2e  e way in SQLite.
0310: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 64    However, the d
0320: 79 6e 61 6d 69 63 20 74 79 70 69 6e 67 20 69 6e  ynamic typing in
0330: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 0a 69   SQLite allows.i
0340: 74 20 74 6f 20 64 6f 20 74 68 69 6e 67 73 20 77  t to do things w
0350: 68 69 63 68 20 61 72 65 20 6e 6f 74 20 70 6f 73  hich are not pos
0360: 73 69 62 6c 65 20 69 6e 20 74 72 61 64 69 74 69  sible in traditi
0370: 6f 6e 61 6c 20 72 69 67 69 64 6c 79 20 74 79 70  onal rigidly typ
0380: 65 64 0a 64 61 74 61 62 61 73 65 73 2e 3c 2f 70  ed.databases.</p
0390: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
03a0: 65 6e 74 20 73 74 6f 72 61 67 65 63 6c 61 73 73  ent storageclass
03b0: 65 73 20 7b 73 74 6f 72 61 67 65 20 63 6c 61 73  es {storage clas
03c0: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 53 74 6f  s}</tcl>.<h1>Sto
03d0: 72 61 67 65 20 43 6c 61 73 73 65 73 20 61 6e 64  rage Classes and
03e0: 20 44 61 74 61 74 79 70 65 73 3c 2f 68 31 3e 0a   Datatypes</h1>.
03f0: 0a 3c 70 3e 45 61 63 68 20 76 61 6c 75 65 20 73  .<p>Each value s
0400: 74 6f 72 65 64 20 69 6e 20 61 6e 20 53 51 4c 69  tored in an SQLi
0410: 74 65 20 64 61 74 61 62 61 73 65 20 28 6f 72 20  te database (or 
0420: 6d 61 6e 69 70 75 6c 61 74 65 64 20 62 79 20 74  manipulated by t
0430: 68 65 0a 64 61 74 61 62 61 73 65 20 65 6e 67 69  he.database engi
0440: 6e 65 29 20 68 61 73 20 6f 6e 65 20 6f 66 20 74  ne) has one of t
0450: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 6f  he following sto
0460: 72 61 67 65 20 63 6c 61 73 73 65 73 3a 3c 2f 70  rage classes:</p
0470: 3e 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  >.<ul>.  <li><p>
0480: 3c 42 3e 4e 55 4c 4c 3c 2f 42 3e 2e 0a 20 20 54  <B>NULL</B>..  T
0490: 68 65 20 76 61 6c 75 65 20 69 73 20 61 20 4e 55  he value is a NU
04a0: 4c 4c 20 76 61 6c 75 65 2e 3c 2f 70 3e 0a 0a 20  LL value.</p>.. 
04b0: 20 3c 6c 69 3e 3c 70 3e 3c 42 3e 49 4e 54 45 47   <li><p><B>INTEG
04c0: 45 52 3c 2f 42 3e 2e 20 54 68 65 20 76 61 6c 75  ER</B>. The valu
04d0: 65 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  e is a signed in
04e0: 74 65 67 65 72 2c 20 73 74 6f 72 65 64 20 69 6e  teger, stored in
04f0: 20 31 2c 0a 20 20 32 2c 20 33 2c 20 34 2c 20 36   1,.  2, 3, 4, 6
0500: 2c 20 6f 72 20 38 20 62 79 74 65 73 20 64 65 70  , or 8 bytes dep
0510: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 6d 61  ending on the ma
0520: 67 6e 69 74 75 64 65 20 6f 66 20 74 68 65 20 76  gnitude of the v
0530: 61 6c 75 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69  alue.</p>..  <li
0540: 3e 3c 70 3e 3c 42 3e 52 45 41 4c 3c 2f 42 3e 2e  ><p><B>REAL</B>.
0550: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 61 20   The value is a 
0560: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
0570: 61 6c 75 65 2c 20 73 74 6f 72 65 64 20 61 73 0a  alue, stored as.
0580: 20 20 61 6e 20 38 2d 62 79 74 65 20 49 45 45 45    an 8-byte IEEE
0590: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
05a0: 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 20 20 3c  number.</p>..  <
05b0: 6c 69 3e 3c 70 3e 3c 42 3e 54 45 58 54 3c 2f 42  li><p><B>TEXT</B
05c0: 3e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  >. The value is 
05d0: 61 20 74 65 78 74 20 73 74 72 69 6e 67 2c 20 73  a text string, s
05e0: 74 6f 72 65 64 20 75 73 69 6e 67 20 74 68 65 0a  tored using the.
05f0: 20 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64    database encod
0600: 69 6e 67 20 28 55 54 46 2d 38 2c 20 55 54 46 2d  ing (UTF-8, UTF-
0610: 31 36 42 45 20 6f 72 20 55 54 46 2d 31 36 4c 45  16BE or UTF-16LE
0620: 29 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70  ).</p>..  <li><p
0630: 3e 3c 42 3e 42 4c 4f 42 3c 2f 42 3e 2e 20 54 68  ><B>BLOB</B>. Th
0640: 65 20 76 61 6c 75 65 20 69 73 20 61 20 62 6c 6f  e value is a blo
0650: 62 20 6f 66 20 64 61 74 61 2c 20 73 74 6f 72 65  b of data, store
0660: 64 20 65 78 61 63 74 6c 79 20 61 73 0a 20 20 69  d exactly as.  i
0670: 74 20 77 61 73 20 69 6e 70 75 74 2e 3c 2f 70 3e  t was input.</p>
0680: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 20 73 74 6f  .</ul>..<p>A sto
0690: 72 61 67 65 20 63 6c 61 73 73 20 69 73 20 6d 6f  rage class is mo
06a0: 72 65 20 67 65 6e 65 72 61 6c 20 74 68 61 6e 20  re general than 
06b0: 61 20 64 61 74 61 74 79 70 65 2e 0a 54 68 65 20  a datatype..The 
06c0: 49 4e 54 45 47 45 52 20 73 74 6f 72 61 67 65 20  INTEGER storage 
06d0: 63 6c 61 73 73 2c 20 66 6f 72 20 65 78 61 6d 70  class, for examp
06e0: 6c 65 2c 20 69 6e 63 6c 75 64 65 73 20 36 20 64  le, includes 6 d
06f0: 69 66 66 65 72 65 6e 74 20 69 6e 74 65 67 65 72  ifferent integer
0700: 0a 64 61 74 61 74 79 70 65 73 20 6f 66 20 64 69  .datatypes of di
0710: 66 66 65 72 65 6e 74 20 6c 65 6e 67 74 68 73 2e  fferent lengths.
0720: 20 20 54 68 69 73 20 6d 61 6b 65 73 20 61 20 64    This makes a d
0730: 69 66 66 65 72 65 6e 63 65 20 6f 6e 20 64 69 73  ifference on dis
0740: 6b 2e 20 20 42 75 74 0a 61 73 20 73 6f 6f 6e 20  k.  But.as soon 
0750: 61 73 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65  as INTEGER value
0760: 73 20 61 72 65 20 72 65 61 64 20 6f 66 66 20 6f  s are read off o
0770: 66 20 64 69 73 6b 20 61 6e 64 20 69 6e 74 6f 20  f disk and into 
0780: 6d 65 6d 6f 72 79 20 66 6f 72 20 70 72 6f 63 65  memory for proce
0790: 73 73 69 6e 67 2c 0a 74 68 65 79 20 61 72 65 20  ssing,.they are 
07a0: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 68 65  converted to the
07b0: 20 6d 6f 73 74 20 67 65 6e 65 72 61 6c 20 64 61   most general da
07c0: 74 61 74 79 70 65 20 28 38 2d 62 79 74 65 20 73  tatype (8-byte s
07d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 29 2e 0a  igned integer)..
07e0: 41 6e 64 20 73 6f 20 66 6f 72 20 74 68 65 20 6d  And so for the m
07f0: 6f 73 74 20 70 61 72 74 2c 20 22 73 74 6f 72 61  ost part, "stora
0800: 67 65 20 63 6c 61 73 73 22 20 69 73 20 69 6e 64  ge class" is ind
0810: 69 73 74 69 6e 67 75 69 73 68 61 62 6c 65 20 66  istinguishable f
0820: 72 6f 6d 20 0a 22 64 61 74 61 74 79 70 65 22 20  rom ."datatype" 
0830: 61 6e 64 20 74 68 65 20 74 77 6f 20 74 65 72 6d  and the two term
0840: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  s can be used in
0850: 74 65 72 63 68 61 6e 67 65 61 62 6c 79 2e 3c 2f  terchangeably.</
0860: 70 3e 0a 0a 3c 70 3e 5e 41 6e 79 20 63 6f 6c 75  p>..<p>^Any colu
0870: 6d 6e 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20  mn in an SQLite 
0880: 76 65 72 73 69 6f 6e 20 33 20 64 61 74 61 62 61  version 3 databa
0890: 73 65 2c 0a 65 78 63 65 70 74 20 61 6e 20 5b 49  se,.except an [I
08a0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
08b0: 45 59 5d 20 63 6f 6c 75 6d 6e 2c 20 6d 61 79 20  EY] column, may 
08c0: 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  be used to store
08d0: 20 61 20 76 61 6c 75 65 20 0a 6f 66 20 61 6e 79   a value .of any
08e0: 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 2e 3c   storage class.<
08f0: 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 76 61 6c 75  /p>..<p>All valu
0900: 65 73 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d  es in SQL statem
0910: 65 6e 74 73 2c 20 77 68 65 74 68 65 72 20 74 68  ents, whether th
0920: 65 79 20 61 72 65 20 6c 69 74 65 72 61 6c 73 20  ey are literals 
0930: 65 6d 62 65 64 64 65 64 20 69 6e 20 53 51 4c 0a  embedded in SQL.
0940: 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20 6f  statement text o
0950: 72 20 5b 70 61 72 61 6d 65 74 65 72 73 5d 20 62  r [parameters] b
0960: 6f 75 6e 64 20 74 6f 20 0a 5b 70 72 65 70 61 72  ound to .[prepar
0970: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 7c 20  ed statements | 
0980: 70 72 65 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20  precompiled SQL 
0990: 73 74 61 74 65 6d 65 6e 74 73 5d 0a 68 61 76 65  statements].have
09a0: 20 61 6e 20 69 6d 70 6c 69 63 69 74 20 73 74 6f   an implicit sto
09b0: 72 61 67 65 20 63 6c 61 73 73 2e 0a 55 6e 64 65  rage class..Unde
09c0: 72 20 63 69 72 63 75 6d 73 74 61 6e 63 65 73 20  r circumstances 
09d0: 64 65 73 63 72 69 62 65 64 20 62 65 6c 6f 77 2c  described below,
09e0: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 65 6e   the.database en
09f0: 67 69 6e 65 20 6d 61 79 20 63 6f 6e 76 65 72 74  gine may convert
0a00: 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20   values between 
0a10: 6e 75 6d 65 72 69 63 20 73 74 6f 72 61 67 65 20  numeric storage 
0a20: 63 6c 61 73 73 65 73 0a 28 49 4e 54 45 47 45 52  classes.(INTEGER
0a30: 20 61 6e 64 20 52 45 41 4c 29 20 61 6e 64 20 54   and REAL) and T
0a40: 45 58 54 20 64 75 72 69 6e 67 20 71 75 65 72 79  EXT during query
0a50: 20 65 78 65 63 75 74 69 6f 6e 2e 20 0a 3c 2f 70   execution. .</p
0a60: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
0a70: 65 6e 74 20 62 6f 6f 6c 65 61 6e 20 7b 62 6f 6f  ent boolean {boo
0a80: 6c 65 61 6e 20 64 61 74 61 74 79 70 65 7d 3c 2f  lean datatype}</
0a90: 74 63 6c 3e 0a 3c 68 32 3e 42 6f 6f 6c 65 61 6e  tcl>.<h2>Boolean
0aa0: 20 44 61 74 61 74 79 70 65 3c 2f 68 32 3e 0a 0a   Datatype</h2>..
0ab0: 3c 70 3e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  <p>SQLite does n
0ac0: 6f 74 20 68 61 76 65 20 61 20 73 65 70 61 72 61  ot have a separa
0ad0: 74 65 20 42 6f 6f 6c 65 61 6e 20 73 74 6f 72 61  te Boolean stora
0ae0: 67 65 20 63 6c 61 73 73 2e 0a 49 6e 73 74 65 61  ge class..Instea
0af0: 64 2c 20 5e 42 6f 6f 6c 65 61 6e 20 76 61 6c 75  d, ^Boolean valu
0b00: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 61 73  es are stored as
0b10: 20 69 6e 74 65 67 65 72 73 20 30 20 28 66 61 6c   integers 0 (fal
0b20: 73 65 29 20 61 6e 64 20 31 20 28 74 72 75 65 29  se) and 1 (true)
0b30: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
0b40: 72 61 67 6d 65 6e 74 20 64 61 74 65 74 69 6d 65  ragment datetime
0b50: 20 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20   {date and time 
0b60: 64 61 74 61 74 79 70 65 7d 3c 2f 74 63 6c 3e 0a  datatype}</tcl>.
0b70: 3c 68 32 3e 44 61 74 65 20 61 6e 64 20 54 69 6d  <h2>Date and Tim
0b80: 65 20 44 61 74 61 74 79 70 65 3c 2f 68 32 3e 0a  e Datatype</h2>.
0b90: 0a 3c 70 3e 53 51 4c 69 74 65 20 64 6f 65 73 20  .<p>SQLite does 
0ba0: 6e 6f 74 20 68 61 76 65 20 61 20 73 74 6f 72 61  not have a stora
0bb0: 67 65 20 63 6c 61 73 73 20 73 65 74 20 61 73 69  ge class set asi
0bc0: 64 65 20 66 6f 72 20 73 74 6f 72 69 6e 67 0a 64  de for storing.d
0bd0: 61 74 65 73 20 61 6e 64 2f 6f 72 20 74 69 6d 65  ates and/or time
0be0: 73 2e 0a 5e 28 49 6e 73 74 65 61 64 2c 20 74 68  s..^(Instead, th
0bf0: 65 20 62 75 69 6c 74 2d 69 6e 20 5b 44 61 74 65  e built-in [Date
0c00: 20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69   And Time Functi
0c10: 6f 6e 73 5d 20 6f 66 20 53 51 4c 69 74 65 20 61  ons] of SQLite a
0c20: 72 65 20 63 61 70 61 62 6c 65 20 6f 66 20 0a 73  re capable of .s
0c30: 74 6f 72 69 6e 67 20 64 61 74 65 73 20 61 6e 64  toring dates and
0c40: 20 74 69 6d 65 73 20 61 73 20 54 45 58 54 2c 20   times as TEXT, 
0c50: 52 45 41 4c 2c 20 6f 72 20 49 4e 54 45 47 45 52  REAL, or INTEGER
0c60: 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 75   values:</p>..<u
0c70: 6c 3e 0a 3c 6c 69 3e 3c 62 3e 54 45 58 54 3c 2f  l>.<li><b>TEXT</
0c80: 62 3e 20 61 73 20 49 53 4f 38 36 30 31 20 73 74  b> as ISO8601 st
0c90: 72 69 6e 67 73 20 28 22 59 59 59 59 2d 4d 4d 2d  rings ("YYYY-MM-
0ca0: 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 22  DD HH:MM:SS.SSS"
0cb0: 29 2e 0a 3c 6c 69 3e 3c 62 3e 52 45 41 4c 3c 2f  )..<li><b>REAL</
0cc0: 62 3e 20 61 73 20 4a 75 6c 69 61 6e 20 64 61 79  b> as Julian day
0cd0: 20 6e 75 6d 62 65 72 73 2c 20 74 68 65 20 6e 75   numbers, the nu
0ce0: 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e  mber of days sin
0cf0: 63 65 0a 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e  ce.noon in Green
0d00: 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72  wich on November
0d10: 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e 20 61   24, 4714 B.C. a
0d20: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 0a  ccording to the.
0d30: 70 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72  proleptic Gregor
0d40: 69 61 6e 20 63 61 6c 65 6e 64 61 72 2e 0a 3c 6c  ian calendar..<l
0d50: 69 3e 3c 62 3e 49 4e 54 45 47 45 52 3c 2f 62 3e  i><b>INTEGER</b>
0d60: 20 61 73 20 55 6e 69 78 20 54 69 6d 65 2c 20 74   as Unix Time, t
0d70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63  he number of sec
0d80: 6f 6e 64 73 20 73 69 6e 63 65 0a 31 39 37 30 2d  onds since.1970-
0d90: 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 55  01-01 00:00:00 U
0da0: 54 43 2e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e  TC..</ul>)^..<p>
0db0: 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e  Applications can
0dc0: 20 63 68 6f 73 65 20 74 6f 20 73 74 6f 72 65 20   chose to store 
0dd0: 64 61 74 65 73 20 61 6e 64 20 74 69 6d 65 73 20  dates and times 
0de0: 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 73 65 0a  in any of these.
0df0: 66 6f 72 6d 61 74 73 20 61 6e 64 20 66 72 65 65  formats and free
0e00: 6c 79 20 63 6f 6e 76 65 72 74 20 62 65 74 77 65  ly convert betwe
0e10: 65 6e 20 66 6f 72 6d 61 74 73 20 75 73 69 6e 67  en formats using
0e20: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 0a 5b 64   the built-in.[d
0e30: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
0e40: 63 74 69 6f 6e 73 5d 2e 3c 2f 70 3e 0a 0a 0a 3c  ctions].</p>...<
0e50: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0e60: 61 66 66 69 6e 69 74 79 20 61 66 66 69 6e 69 74  affinity affinit
0e70: 79 20 7b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  y {column affini
0e80: 74 79 7d 20 7b 74 79 70 65 20 61 66 66 69 6e 69  ty} {type affini
0e90: 74 79 7d 20 7b 2a 61 66 66 69 6e 69 74 69 65 73  ty} {*affinities
0ea0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 79 70 65  }</tcl>.<h1>Type
0eb0: 20 41 66 66 69 6e 69 74 79 3c 2f 68 31 3e 0a 0a   Affinity</h1>..
0ec0: 3c 70 3e 0a 53 51 4c 20 64 61 74 61 62 61 73 65  <p>.SQL database
0ed0: 20 65 6e 67 69 6e 65 73 20 74 68 61 74 20 75 73   engines that us
0ee0: 65 20 72 69 67 69 64 20 74 79 70 69 6e 67 20 77  e rigid typing w
0ef0: 69 6c 6c 20 75 73 75 61 6c 6c 79 20 74 72 79 20  ill usually try 
0f00: 74 6f 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to.automatically
0f10: 20 63 6f 6e 76 65 72 74 20 76 61 6c 75 65 73 20   convert values 
0f20: 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  to the appropria
0f30: 74 65 20 64 61 74 61 74 79 70 65 2e 20 20 43 6f  te datatype.  Co
0f40: 6e 73 69 64 65 72 20 74 68 69 73 3a 0a 0a 3c 62  nsider this:..<b
0f50: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
0f60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0f70: 61 20 49 4e 54 2c 20 62 20 56 41 52 43 48 41 52  a INT, b VARCHAR
0f80: 28 31 30 29 29 3b 0a 49 4e 53 45 52 54 20 49 4e  (10));.INSERT IN
0f90: 54 4f 20 74 31 28 61 2c 62 29 20 56 41 4c 55 45  TO t1(a,b) VALUE
0fa0: 53 28 27 31 32 33 27 2c 34 35 36 29 3b 0a 3c 2f  S('123',456);.</
0fb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
0fc0: 3e 0a 0a 3c 70 3e 0a 52 69 67 69 64 6c 79 2d 74  >..<p>.Rigidly-t
0fd0: 79 70 65 64 20 64 61 74 61 62 61 73 65 20 77 69  yped database wi
0fe0: 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20 73  ll convert the s
0ff0: 74 72 69 6e 67 20 27 31 32 33 27 20 69 6e 74 6f  tring '123' into
1000: 20 61 6e 0a 69 6e 74 65 67 65 72 20 31 32 33 20   an.integer 123 
1010: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
1020: 34 35 36 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  456 into a strin
1030: 67 20 27 34 35 36 27 20 70 72 69 6f 72 20 74 6f  g '456' prior to
1040: 0a 64 6f 69 6e 67 20 74 68 65 20 69 6e 73 65 72  .doing the inser
1050: 74 2e 0a 0a 3c 70 3e 0a 49 6e 20 6f 72 64 65 72  t...<p>.In order
1060: 20 74 6f 20 6d 61 78 69 6d 69 7a 65 20 63 6f 6d   to maximize com
1070: 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77 65  patibility betwe
1080: 65 6e 20 53 51 4c 69 74 65 20 61 6e 64 20 6f 74  en SQLite and ot
1090: 68 65 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67  her database.eng
10a0: 69 6e 65 73 2c 20 61 6e 64 20 73 6f 20 74 68 61  ines, and so tha
10b0: 74 20 74 68 65 20 65 78 61 6d 70 6c 65 20 61 62  t the example ab
10c0: 6f 76 65 20 77 69 6c 6c 20 77 6f 72 6b 20 6f 6e  ove will work on
10d0: 20 53 51 4c 69 74 65 20 61 73 20 69 74 20 64 6f   SQLite as it do
10e0: 65 73 0a 6f 6e 20 6f 74 68 65 72 20 53 51 4c 20  es.on other SQL 
10f0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73  database engines
1100: 2c 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  ,.SQLite support
1110: 73 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  s the concept of
1120: 20 22 74 79 70 65 20 61 66 66 69 6e 69 74 79 22   "type affinity"
1130: 20 6f 6e 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65   on columns..The
1140: 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 20 6f   type affinity o
1150: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  f a column is th
1160: 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 79  e recommended ty
1170: 70 65 20 66 6f 72 20 64 61 74 61 20 73 74 6f 72  pe for data stor
1180: 65 64 0a 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d  ed.in that colum
1190: 6e 2e 20 20 54 68 65 20 69 6d 70 6f 72 74 61 6e  n.  The importan
11a0: 74 20 69 64 65 61 20 68 65 72 65 20 69 73 20 74  t idea here is t
11b0: 68 61 74 20 74 68 65 20 74 79 70 65 20 69 73 20  hat the type is 
11c0: 72 65 63 6f 6d 6d 65 6e 64 65 64 2c 20 6e 6f 74  recommended, not
11d0: 0a 72 65 71 75 69 72 65 64 2e 20 20 41 6e 79 20  .required.  Any 
11e0: 63 6f 6c 75 6d 6e 20 63 61 6e 20 73 74 69 6c 6c  column can still
11f0: 20 73 74 6f 72 65 20 61 6e 79 20 74 79 70 65 20   store any type 
1200: 6f 66 20 64 61 74 61 2e 0a 49 74 20 69 73 20 6a  of data..It is j
1210: 75 73 74 20 74 68 61 74 20 73 6f 6d 65 20 63 6f  ust that some co
1220: 6c 75 6d 6e 73 2c 20 67 69 76 65 6e 20 74 68 65  lumns, given the
1230: 20 63 68 6f 69 63 65 2c 20 77 69 6c 6c 20 70 72   choice, will pr
1240: 65 66 65 72 20 74 6f 20 75 73 65 0a 6f 6e 65 20  efer to use.one 
1250: 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 76  storage class ov
1260: 65 72 20 61 6e 6f 74 68 65 72 2e 20 20 54 68 65  er another.  The
1270: 20 70 72 65 66 65 72 72 65 64 20 73 74 6f 72 61   preferred stora
1280: 67 65 20 63 6c 61 73 73 20 66 6f 72 0a 61 20 63  ge class for.a c
1290: 6f 6c 75 6d 6e 20 69 73 20 63 61 6c 6c 65 64 20  olumn is called 
12a0: 69 74 73 20 22 61 66 66 69 6e 69 74 79 22 2e 0a  its "affinity"..
12b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 45 61 63 68 20  </p>..<p>^(Each 
12c0: 63 6f 6c 75 6d 6e 20 69 6e 20 61 6e 20 53 51 4c  column in an SQL
12d0: 69 74 65 20 33 20 64 61 74 61 62 61 73 65 20 69  ite 3 database i
12e0: 73 20 61 73 73 69 67 6e 65 64 20 6f 6e 65 20 6f  s assigned one o
12f0: 66 20 74 68 65 0a 66 6f 6c 6c 6f 77 69 6e 67 20  f the.following 
1300: 74 79 70 65 20 61 66 66 69 6e 69 74 69 65 73 3a  type affinities:
1310: 3c 2f 70 3e 0a 3c 75 6c 3e 0a 09 3c 6c 69 3e 54  </p>.<ul>..<li>T
1320: 45 58 54 3c 2f 4c 49 3e 0a 09 3c 6c 69 3e 4e 55  EXT</LI>..<li>NU
1330: 4d 45 52 49 43 3c 2f 4c 49 3e 0a 09 3c 6c 69 3e  MERIC</LI>..<li>
1340: 49 4e 54 45 47 45 52 3c 2f 4c 49 3e 0a 20 20 20  INTEGER</LI>.   
1350: 20 20 20 20 20 3c 6c 69 3e 52 45 41 4c 3c 2f 6c       <li>REAL</l
1360: 69 3e 0a 09 3c 6c 69 3e 42 4c 4f 42 3c 2f 4c 49  i>..<li>BLOB</LI
1370: 3e 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 28 48  >.</ul>)^..<p>(H
1380: 69 73 74 6f 72 69 63 61 6c 20 6e 6f 74 65 3a 20  istorical note: 
1390: 20 54 68 65 20 22 42 4c 4f 42 22 20 74 79 70 65   The "BLOB" type
13a0: 20 61 66 66 69 6e 69 74 79 20 75 73 65 64 20 74   affinity used t
13b0: 6f 20 62 65 20 63 61 6c 6c 65 64 20 22 4e 4f 4e  o be called "NON
13c0: 45 22 2e 0a 42 75 74 20 74 68 61 74 20 74 65 72  E"..But that ter
13d0: 6d 20 77 61 73 20 65 61 73 79 20 74 6f 20 63 6f  m was easy to co
13e0: 6e 66 75 73 65 20 77 69 74 68 20 22 6e 6f 20 61  nfuse with "no a
13f0: 66 66 69 6e 69 74 79 22 20 61 6e 64 20 73 6f 20  ffinity" and so 
1400: 69 74 20 77 61 73 0a 72 65 6e 61 6d 65 64 2e 29  it was.renamed.)
1410: 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 77  ..<p>^A column w
1420: 69 74 68 20 54 45 58 54 20 61 66 66 69 6e 69 74  ith TEXT affinit
1430: 79 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61 74  y stores all dat
1440: 61 20 75 73 69 6e 67 20 73 74 6f 72 61 67 65 20  a using storage 
1450: 63 6c 61 73 73 65 73 0a 4e 55 4c 4c 2c 20 54 45  classes.NULL, TE
1460: 58 54 20 6f 72 20 42 4c 4f 42 2e 20 5e 49 66 20  XT or BLOB. ^If 
1470: 6e 75 6d 65 72 69 63 61 6c 20 64 61 74 61 20 69  numerical data i
1480: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
1490: 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 54 45  a column with.TE
14a0: 58 54 20 61 66 66 69 6e 69 74 79 20 69 74 20 69  XT affinity it i
14b0: 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
14c0: 20 74 65 78 74 20 66 6f 72 6d 20 62 65 66 6f 72   text form befor
14d0: 65 20 62 65 69 6e 67 20 73 74 6f 72 65 64 2e 3c  e being stored.<
14e0: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d  /p>..<p>^A colum
14f0: 6e 20 77 69 74 68 20 4e 55 4d 45 52 49 43 20 61  n with NUMERIC a
1500: 66 66 69 6e 69 74 79 20 6d 61 79 20 63 6f 6e 74  ffinity may cont
1510: 61 69 6e 20 76 61 6c 75 65 73 20 75 73 69 6e 67  ain values using
1520: 20 61 6c 6c 20 66 69 76 65 0a 73 74 6f 72 61 67   all five.storag
1530: 65 20 63 6c 61 73 73 65 73 2e 20 20 5e 57 68 65  e classes.  ^Whe
1540: 6e 20 74 65 78 74 20 64 61 74 61 20 69 73 20 69  n text data is i
1550: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 4e  nserted into a N
1560: 55 4d 45 52 49 43 20 63 6f 6c 75 6d 6e 2c 20 74  UMERIC column, t
1570: 68 65 0a 73 74 6f 72 61 67 65 20 63 6c 61 73 73  he.storage class
1580: 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 73 20   of the text is 
1590: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 49 4e 54  converted to INT
15a0: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 28 69 6e  EGER or REAL (in
15b0: 20 6f 72 64 65 72 20 6f 66 0a 70 72 65 66 65 72   order of.prefer
15c0: 65 6e 63 65 29 20 69 66 20 73 75 63 68 20 63 6f  ence) if such co
15d0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 6c 6f 73 73  nversion is loss
15e0: 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73 69  less and reversi
15f0: 62 6c 65 2e 0a 5e 46 6f 72 20 63 6f 6e 76 65 72  ble..^For conver
1600: 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 54 45  sions between TE
1610: 58 54 20 61 6e 64 20 52 45 41 4c 20 73 74 6f 72  XT and REAL stor
1620: 61 67 65 20 63 6c 61 73 73 65 73 2c 20 53 51 4c  age classes, SQL
1630: 69 74 65 20 63 6f 6e 73 69 64 65 72 73 0a 74 68  ite considers.th
1640: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20  e conversion to 
1650: 62 65 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20  be lossless and 
1660: 72 65 76 65 72 73 69 62 6c 65 20 69 66 20 74 68  reversible if th
1670: 65 20 66 69 72 73 74 20 31 35 20 73 69 67 6e 69  e first 15 signi
1680: 66 69 63 61 6e 74 0a 64 65 63 69 6d 61 6c 20 64  ficant.decimal d
1690: 69 67 69 74 73 20 6f 66 20 74 68 65 20 6e 75 6d  igits of the num
16a0: 62 65 72 20 61 72 65 20 70 72 65 73 65 72 76 65  ber are preserve
16b0: 64 2e 0a 5e 49 66 20 74 68 65 20 6c 6f 73 73 6c  d..^If the lossl
16c0: 65 73 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f  ess conversion o
16d0: 66 20 54 45 58 54 20 74 6f 20 49 4e 54 45 47 45  f TEXT to INTEGE
16e0: 52 20 6f 72 20 52 45 41 4c 20 69 73 20 6e 6f 74  R or REAL is not
16f0: 20 70 6f 73 73 69 62 6c 65 20 74 68 65 6e 0a 74   possible then.t
1700: 68 65 20 76 61 6c 75 65 20 69 73 20 73 74 6f 72  he value is stor
1710: 65 64 20 75 73 69 6e 67 20 74 68 65 20 54 45 58  ed using the TEX
1720: 54 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 2e  T storage class.
1730: 20 5e 4e 6f 0a 61 74 74 65 6d 70 74 20 69 73 20   ^No.attempt is 
1740: 6d 61 64 65 20 74 6f 20 63 6f 6e 76 65 72 74 20  made to convert 
1750: 4e 55 4c 4c 20 6f 72 20 42 4c 4f 42 20 76 61 6c  NULL or BLOB val
1760: 75 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  ues.</p>..<p>^A 
1770: 73 74 72 69 6e 67 20 6d 69 67 68 74 20 6c 6f 6f  string might loo
1780: 6b 20 6c 69 6b 65 20 61 20 66 6c 6f 61 74 69 6e  k like a floatin
1790: 67 2d 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20  g-point literal 
17a0: 77 69 74 68 0a 61 20 64 65 63 69 6d 61 6c 20 70  with.a decimal p
17b0: 6f 69 6e 74 20 61 6e 64 2f 6f 72 20 65 78 70 6f  oint and/or expo
17c0: 6e 65 6e 74 20 6e 6f 74 61 74 69 6f 6e 20 62 75  nent notation bu
17d0: 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a 74 68 65  t as long as.the
17e0: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 65 78   value can be ex
17f0: 70 72 65 73 73 65 64 20 61 73 20 61 6e 20 69 6e  pressed as an in
1800: 74 65 67 65 72 2c 20 74 68 65 20 4e 55 4d 45 52  teger, the NUMER
1810: 49 43 20 61 66 66 69 6e 69 74 79 20 77 69 6c 6c  IC affinity will
1820: 20 63 6f 6e 76 65 72 74 0a 69 74 20 69 6e 74 6f   convert.it into
1830: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 28 48   an integer. ^(H
1840: 65 6e 63 65 2c 20 74 68 65 20 73 74 72 69 6e 67  ence, the string
1850: 20 27 33 2e 30 65 2b 35 27 20 69 73 20 73 74 6f   '3.0e+5' is sto
1860: 72 65 64 20 69 6e 20 61 0a 63 6f 6c 75 6d 6e 20  red in a.column 
1870: 77 69 74 68 20 4e 55 4d 45 52 49 43 20 61 66 66  with NUMERIC aff
1880: 69 6e 69 74 79 20 61 73 20 74 68 65 20 69 6e 74  inity as the int
1890: 65 67 65 72 20 33 30 30 30 30 30 2c 20 6e 6f 74  eger 300000, not
18a0: 20 61 73 20 74 68 65 20 66 6c 6f 61 74 69 6e 67   as the floating
18b0: 0a 70 6f 69 6e 74 20 76 61 6c 75 65 20 33 30 30  .point value 300
18c0: 30 30 30 2e 30 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  000.0.)^</p>..<p
18d0: 3e 5e 41 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20  >^A column that 
18e0: 75 73 65 73 20 49 4e 54 45 47 45 52 20 61 66 66  uses INTEGER aff
18f0: 69 6e 69 74 79 20 62 65 68 61 76 65 73 20 74 68  inity behaves th
1900: 65 20 73 61 6d 65 20 61 73 20 61 20 63 6f 6c 75  e same as a colu
1910: 6d 6e 0a 77 69 74 68 20 4e 55 4d 45 52 49 43 20  mn.with NUMERIC 
1920: 61 66 66 69 6e 69 74 79 2e 20 20 54 68 65 20 64  affinity.  The d
1930: 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1940: 6e 20 49 4e 54 45 47 45 52 20 61 6e 64 20 4e 55  n INTEGER and NU
1950: 4d 45 52 49 43 20 61 66 66 69 6e 69 74 79 0a 69  MERIC affinity.i
1960: 73 20 6f 6e 6c 79 20 65 76 69 64 65 6e 74 20 69  s only evident i
1970: 6e 20 61 20 5b 43 41 53 54 20 65 78 70 72 65 73  n a [CAST expres
1980: 73 69 6f 6e 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  sion].</p>..<p>^
1990: 41 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 52 45  A column with RE
19a0: 41 4c 20 61 66 66 69 6e 69 74 79 20 62 65 68 61  AL affinity beha
19b0: 76 65 73 20 6c 69 6b 65 20 61 20 63 6f 6c 75 6d  ves like a colum
19c0: 6e 20 77 69 74 68 20 4e 55 4d 45 52 49 43 0a 61  n with NUMERIC.a
19d0: 66 66 69 6e 69 74 79 20 65 78 63 65 70 74 20 74  ffinity except t
19e0: 68 61 74 20 69 74 20 66 6f 72 63 65 73 20 69 6e  hat it forces in
19f0: 74 65 67 65 72 20 76 61 6c 75 65 73 20 69 6e 74  teger values int
1a00: 6f 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  o floating point
1a10: 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e  .representation.
1a20: 20 20 28 5e 41 73 20 61 6e 20 69 6e 74 65 72 6e    (^As an intern
1a30: 61 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c  al optimization,
1a40: 20 73 6d 61 6c 6c 20 66 6c 6f 61 74 69 6e 67 20   small floating 
1a50: 70 6f 69 6e 74 0a 76 61 6c 75 65 73 20 77 69 74  point.values wit
1a60: 68 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  h no fractional 
1a70: 63 6f 6d 70 6f 6e 65 6e 74 20 61 6e 64 20 73 74  component and st
1a80: 6f 72 65 64 20 69 6e 20 63 6f 6c 75 6d 6e 73 20  ored in columns 
1a90: 77 69 74 68 20 52 45 41 4c 0a 61 66 66 69 6e 69  with REAL.affini
1aa0: 74 79 20 61 72 65 20 77 72 69 74 74 65 6e 20 74  ty are written t
1ab0: 6f 20 64 69 73 6b 20 61 73 20 69 6e 74 65 67 65  o disk as intege
1ac0: 72 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 74  rs in order to t
1ad0: 61 6b 65 20 75 70 20 6c 65 73 73 20 0a 73 70 61  ake up less .spa
1ae0: 63 65 20 61 6e 64 20 61 72 65 20 61 75 74 6f 6d  ce and are autom
1af0: 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74  atically convert
1b00: 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 66 6c 6f  ed back into flo
1b10: 61 74 69 6e 67 20 70 6f 69 6e 74 20 61 73 0a 74  ating point as.t
1b20: 68 65 20 76 61 6c 75 65 20 69 73 20 72 65 61 64  he value is read
1b30: 20 6f 75 74 2e 0a 5e 54 68 69 73 20 6f 70 74 69   out..^This opti
1b40: 6d 69 7a 61 74 69 6f 6e 20 69 73 20 63 6f 6d 70  mization is comp
1b50: 6c 65 74 65 6c 79 20 69 6e 76 69 73 69 62 6c 65  letely invisible
1b60: 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
1b70: 6c 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 0a 62  l and can only.b
1b80: 65 20 64 65 74 65 63 74 65 64 20 62 79 20 65 78  e detected by ex
1b90: 61 6d 69 6e 69 6e 67 20 74 68 65 20 72 61 77 20  amining the raw 
1ba0: 62 69 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  bits of the data
1bb0: 62 61 73 65 20 66 69 6c 65 2e 29 3c 2f 70 3e 0a  base file.)</p>.
1bc0: 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e 20 77 69  .<p>^A column wi
1bd0: 74 68 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42  th affinity BLOB
1be0: 20 64 6f 65 73 20 6e 6f 74 20 70 72 65 66 65 72   does not prefer
1bf0: 20 6f 6e 65 20 73 74 6f 72 61 67 65 20 63 6c 61   one storage cla
1c00: 73 73 20 6f 76 65 72 0a 61 6e 6f 74 68 65 72 20  ss over.another 
1c10: 61 6e 64 20 6e 6f 20 61 74 74 65 6d 70 74 20 69  and no attempt i
1c20: 73 20 6d 61 64 65 20 74 6f 20 63 6f 65 72 63 65  s made to coerce
1c30: 20 64 61 74 61 20 66 72 6f 6d 20 6f 6e 65 20 73   data from one s
1c40: 74 6f 72 61 67 65 20 63 6c 61 73 73 20 69 6e 74  torage class int
1c50: 6f 0a 61 6e 6f 74 68 65 72 2e 3c 2f 70 3e 0a 0a  o.another.</p>..
1c60: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
1c70: 20 61 66 66 6e 61 6d 65 20 7b 72 75 6c 65 73 20   affname {rules 
1c80: 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  for determining 
1c90: 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 7d  column affinity}
1ca0: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 44 65 74 65 72  </tcl>.<h2>Deter
1cb0: 6d 69 6e 61 74 69 6f 6e 20 4f 66 20 43 6f 6c 75  mination Of Colu
1cc0: 6d 6e 20 41 66 66 69 6e 69 74 79 3c 2f 68 32 3e  mn Affinity</h2>
1cd0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 61 66 66 69 6e  ..<p>^(The affin
1ce0: 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ity of a column 
1cf0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1d00: 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79   the declared ty
1d10: 70 65 0a 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  pe.of the column
1d20: 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  , according to t
1d30: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c  he following rul
1d40: 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
1d50: 73 68 6f 77 6e 3a 29 5e 3c 2f 70 3e 0a 0a 3c 6f  shown:)^</p>..<o
1d60: 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
1d70: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
1d80: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73  e contains the s
1d90: 74 72 69 6e 67 20 22 49 4e 54 22 20 74 68 65 6e  tring "INT" then
1da0: 20 69 74 0a 20 20 69 73 20 61 73 73 69 67 6e 65   it.  is assigne
1db0: 64 20 49 4e 54 45 47 45 52 20 61 66 66 69 6e 69  d INTEGER affini
1dc0: 74 79 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  ty.</p>..  <li><
1dd0: 70 3e 5e 49 66 20 74 68 65 20 64 65 63 6c 61 72  p>^If the declar
1de0: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63  ed type of the c
1df0: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61  olumn contains a
1e00: 6e 79 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  ny of the string
1e10: 73 0a 20 20 22 43 48 41 52 22 2c 20 22 43 4c 4f  s.  "CHAR", "CLO
1e20: 42 22 2c 20 6f 72 20 22 54 45 58 54 22 20 74 68  B", or "TEXT" th
1e30: 65 6e 20 74 68 61 74 0a 20 20 63 6f 6c 75 6d 6e  en that.  column
1e40: 20 68 61 73 20 54 45 58 54 20 61 66 66 69 6e 69   has TEXT affini
1e50: 74 79 2e 20 20 5e 4e 6f 74 69 63 65 20 74 68 61  ty.  ^Notice tha
1e60: 74 20 74 68 65 20 74 79 70 65 20 56 41 52 43 48  t the type VARCH
1e70: 41 52 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  AR contains the.
1e80: 20 20 73 74 72 69 6e 67 20 22 43 48 41 52 22 20    string "CHAR" 
1e90: 61 6e 64 20 69 73 20 74 68 75 73 20 61 73 73 69  and is thus assi
1ea0: 67 6e 65 64 20 54 45 58 54 20 61 66 66 69 6e 69  gned TEXT affini
1eb0: 74 79 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  ty.</p>..  <li><
1ec0: 70 3e 5e 49 66 20 74 68 65 20 64 65 63 6c 61 72  p>^If the declar
1ed0: 65 64 20 74 79 70 65 20 66 6f 72 20 61 20 63 6f  ed type for a co
1ee0: 6c 75 6d 6e 0a 20 20 63 6f 6e 74 61 69 6e 73 20  lumn.  contains 
1ef0: 74 68 65 20 73 74 72 69 6e 67 20 22 42 4c 4f 42  the string "BLOB
1f00: 22 20 6f 72 20 69 66 0a 20 20 6e 6f 20 74 79 70  " or if.  no typ
1f10: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 74  e is specified t
1f20: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  hen the column h
1f30: 61 73 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42  as affinity BLOB
1f40: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
1f50: 5e 49 66 20 74 68 65 20 64 65 63 6c 61 72 65 64  ^If the declared
1f60: 20 74 79 70 65 20 66 6f 72 20 61 20 63 6f 6c 75   type for a colu
1f70: 6d 6e 0a 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e  mn.  contains an
1f80: 79 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 73  y of the strings
1f90: 20 22 52 45 41 4c 22 2c 20 22 46 4c 4f 41 22 2c   "REAL", "FLOA",
1fa0: 0a 20 20 6f 72 20 22 44 4f 55 42 22 20 74 68 65  .  or "DOUB" the
1fb0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73  n the column has
1fc0: 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 3c   REAL affinity.<
1fd0: 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f  /p>..  <li><p>^O
1fe0: 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 61 66  therwise, the af
1ff0: 66 69 6e 69 74 79 20 69 73 20 4e 55 4d 45 52 49  finity is NUMERI
2000: 43 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  C.</p>.</ol>..<p
2010: 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  >^Note that the 
2020: 6f 72 64 65 72 20 6f 66 20 74 68 65 20 72 75 6c  order of the rul
2030: 65 73 20 66 6f 72 20 64 65 74 65 72 6d 69 6e 69  es for determini
2040: 6e 67 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ng column affini
2050: 74 79 0a 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e  ty.is important.
2060: 20 20 5e 41 20 63 6f 6c 75 6d 6e 20 77 68 6f 73    ^A column whos
2070: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
2080: 69 73 20 22 43 48 41 52 49 4e 54 22 20 77 69 6c  is "CHARINT" wil
2090: 6c 20 6d 61 74 63 68 0a 62 6f 74 68 20 72 75 6c  l match.both rul
20a0: 65 73 20 31 20 61 6e 64 20 32 20 62 75 74 20 74  es 1 and 2 but t
20b0: 68 65 20 66 69 72 73 74 20 72 75 6c 65 20 74 61  he first rule ta
20c0: 6b 65 73 20 70 72 65 63 65 64 65 6e 63 65 20 61  kes precedence a
20d0: 6e 64 20 73 6f 20 74 68 65 20 0a 63 6f 6c 75 6d  nd so the .colum
20e0: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 6c 6c 20  n affinity will 
20f0: 62 65 20 49 4e 54 45 47 45 52 2e 3c 2f 70 3e 0a  be INTEGER.</p>.
2100: 0a 3c 68 33 3e 41 66 66 69 6e 69 74 79 20 4e 61  .<h3>Affinity Na
2110: 6d 65 20 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e  me Examples</h3>
2120: 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
2130: 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 68  ng table shows h
2140: 6f 77 20 6d 61 6e 79 20 63 6f 6d 6d 6f 6e 20 64  ow many common d
2150: 61 74 61 74 79 70 65 20 6e 61 6d 65 73 20 66 72  atatype names fr
2160: 6f 6d 0a 6d 6f 72 65 20 74 72 61 64 69 74 69 6f  om.more traditio
2170: 6e 61 6c 20 53 51 4c 20 69 6d 70 6c 65 6d 65 6e  nal SQL implemen
2180: 74 61 74 69 6f 6e 73 20 61 72 65 20 63 6f 6e 76  tations are conv
2190: 65 72 74 65 64 20 69 6e 74 6f 20 61 66 66 69 6e  erted into affin
21a0: 69 74 69 65 73 20 62 79 20 74 68 65 20 66 69 76  ities by the fiv
21b0: 65 20 72 75 6c 65 73 20 6f 66 20 74 68 65 0a 70  e rules of the.p
21c0: 72 65 76 69 6f 75 73 20 73 65 63 74 69 6f 6e 2e  revious section.
21d0: 20 20 54 68 69 73 20 74 61 62 6c 65 20 73 68 6f    This table sho
21e0: 77 73 20 6f 6e 6c 79 20 61 20 73 6d 61 6c 6c 20  ws only a small 
21f0: 73 75 62 73 65 74 20 6f 66 20 74 68 65 0a 64 61  subset of the.da
2200: 74 61 74 79 70 65 20 6e 61 6d 65 73 20 74 68 61  tatype names tha
2210: 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 63  t SQLite will ac
2220: 63 65 70 74 2e 20 20 4e 6f 74 65 20 74 68 61 74  cept.  Note that
2230: 20 5e 28 6e 75 6d 65 72 69 63 20 61 72 67 75 6d   ^(numeric argum
2240: 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68 65  ents.in parenthe
2250: 73 65 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 69  ses that followi
2260: 6e 67 20 74 68 65 20 74 79 70 65 20 6e 61 6d 65  ng the type name
2270: 20 28 65 78 3a 20 22 56 41 52 43 48 41 52 28 32   (ex: "VARCHAR(2
2280: 35 35 29 22 29 20 61 72 65 0a 69 67 6e 6f 72 65  55)") are.ignore
2290: 64 29 5e 20 62 79 20 53 51 4c 69 74 65 20 2d 20  d)^ by SQLite - 
22a0: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
22b0: 69 6d 70 6f 73 65 20 61 6e 79 20 6c 65 6e 67 74  impose any lengt
22c0: 68 20 72 65 73 74 72 69 63 74 69 6f 6e 73 0a 28  h restrictions.(
22d0: 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  other than the l
22e0: 61 72 67 65 20 67 6c 6f 62 61 6c 20 5b 53 51 4c  arge global [SQL
22f0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20  ITE_MAX_LENGTH] 
2300: 6c 69 6d 69 74 29 20 6f 6e 20 74 68 65 20 6c 65  limit) on the le
2310: 6e 67 74 68 20 6f 66 0a 73 74 72 69 6e 67 73 2c  ngth of.strings,
2320: 20 42 4c 4f 42 73 20 6f 72 20 6e 75 6d 65 72 69   BLOBs or numeri
2330: 63 20 76 61 6c 75 65 73 2e 3c 2f 70 3e 0a 0a 3c  c values.</p>..<
2340: 62 6c 6f 63 6b 71 75 6f 74 65 3e 20 5e 28 0a 3c  blockquote> ^(.<
2350: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 31 22  table border="1"
2360: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35 22   cellpadding="5"
2370: 3e 0a 3c 74 72 3e 3c 74 68 3e 45 78 61 6d 70 6c  >.<tr><th>Exampl
2380: 65 20 54 79 70 65 6e 61 6d 65 73 20 46 72 6f 6d  e Typenames From
2390: 20 54 68 65 3c 62 72 3e 43 52 45 41 54 45 20 54   The<br>CREATE T
23a0: 41 42 4c 45 20 53 74 61 74 65 6d 65 6e 74 3c 62  ABLE Statement<b
23b0: 72 3e 0a 20 20 20 20 20 20 20 20 6f 72 20 43 41  r>.        or CA
23c0: 53 54 20 45 78 70 72 65 73 73 69 6f 6e 0a 20 20  ST Expression.  
23d0: 20 20 3c 74 68 3e 52 65 73 75 6c 74 69 6e 67 20    <th>Resulting 
23e0: 41 66 66 69 6e 69 74 79 0a 20 20 20 20 3c 74 68  Affinity.    <th
23f0: 3e 52 75 6c 65 20 55 73 65 64 20 54 6f 20 44 65  >Rule Used To De
2400: 74 65 72 6d 69 6e 65 20 41 66 66 69 6e 69 74 79  termine Affinity
2410: 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
2420: 22 63 65 6e 74 65 72 22 20 76 61 6c 69 67 6e 3d  "center" valign=
2430: 22 74 6f 70 22 3e 0a 20 20 49 4e 54 3c 62 72 3e  "top">.  INT<br>
2440: 0a 20 20 49 4e 54 45 47 45 52 3c 62 72 3e 0a 20  .  INTEGER<br>. 
2450: 20 54 49 4e 59 49 4e 54 3c 62 72 3e 0a 20 20 53   TINYINT<br>.  S
2460: 4d 41 4c 4c 49 4e 54 3c 62 72 3e 0a 20 20 4d 45  MALLINT<br>.  ME
2470: 44 49 55 4d 49 4e 54 3c 62 72 3e 0a 20 20 42 49  DIUMINT<br>.  BI
2480: 47 49 4e 54 3c 62 72 3e 0a 20 20 55 4e 53 49 47  GINT<br>.  UNSIG
2490: 4e 45 44 20 42 49 47 20 49 4e 54 3c 62 72 3e 0a  NED BIG INT<br>.
24a0: 20 20 49 4e 54 32 3c 62 72 3e 0a 20 20 49 4e 54    INT2<br>.  INT
24b0: 38 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  8.<td align="cen
24c0: 74 65 72 22 3e 49 4e 54 45 47 45 52 0a 3c 74 64  ter">INTEGER.<td
24d0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
24e0: 31 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  1..<tr><td align
24f0: 3d 22 63 65 6e 74 65 72 22 20 76 61 6c 69 67 6e  ="center" valign
2500: 3d 22 74 6f 70 22 3e 0a 20 20 43 48 41 52 41 43  ="top">.  CHARAC
2510: 54 45 52 28 32 30 29 3c 62 72 3e 0a 20 20 56 41  TER(20)<br>.  VA
2520: 52 43 48 41 52 28 32 35 35 29 3c 62 72 3e 0a 20  RCHAR(255)<br>. 
2530: 20 56 41 52 59 49 4e 47 20 43 48 41 52 41 43 54   VARYING CHARACT
2540: 45 52 28 32 35 35 29 3c 62 72 3e 0a 20 20 4e 43  ER(255)<br>.  NC
2550: 48 41 52 28 35 35 29 3c 62 72 3e 0a 20 20 4e 41  HAR(55)<br>.  NA
2560: 54 49 56 45 20 43 48 41 52 41 43 54 45 52 28 37  TIVE CHARACTER(7
2570: 30 29 3c 62 72 3e 0a 20 20 4e 56 41 52 43 48 41  0)<br>.  NVARCHA
2580: 52 28 31 30 30 29 3c 62 72 3e 0a 20 20 54 45 58  R(100)<br>.  TEX
2590: 54 3c 62 72 3e 0a 20 20 43 4c 4f 42 0a 3c 74 64  T<br>.  CLOB.<td
25a0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
25b0: 54 45 58 54 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  TEXT.<td align="
25c0: 63 65 6e 74 65 72 22 3e 32 0a 0a 3c 74 72 3e 3c  center">2..<tr><
25d0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
25e0: 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a  " valign="top">.
25f0: 20 20 42 4c 4f 42 3c 62 72 3e 0a 20 20 3c 69 3e    BLOB<br>.  <i>
2600: 6e 6f 20 64 61 74 61 74 79 70 65 20 73 70 65 63  no datatype spec
2610: 69 66 69 65 64 3c 2f 69 3e 0a 3c 74 64 20 61 6c  ified</i>.<td al
2620: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 42 4c 4f  ign="center">BLO
2630: 42 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  B.<td align="cen
2640: 74 65 72 22 3e 33 0a 0a 3c 74 72 3e 3c 74 64 20  ter">3..<tr><td 
2650: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 76  align="center" v
2660: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 20 20 52  align="top">.  R
2670: 45 41 4c 3c 62 72 3e 0a 20 20 44 4f 55 42 4c 45  EAL<br>.  DOUBLE
2680: 3c 62 72 3e 0a 20 20 44 4f 55 42 4c 45 20 50 52  <br>.  DOUBLE PR
2690: 45 43 49 53 49 4f 4e 3c 62 72 3e 0a 20 20 46 4c  ECISION<br>.  FL
26a0: 4f 41 54 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  OAT.<td align="c
26b0: 65 6e 74 65 72 22 3e 52 45 41 4c 0a 3c 74 64 20  enter">REAL.<td 
26c0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 34  align="center">4
26d0: 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
26e0: 22 63 65 6e 74 65 72 22 20 76 61 6c 69 67 6e 3d  "center" valign=
26f0: 22 74 6f 70 22 3e 0a 20 20 4e 55 4d 45 52 49 43  "top">.  NUMERIC
2700: 3c 62 72 3e 0a 20 20 44 45 43 49 4d 41 4c 28 31  <br>.  DECIMAL(1
2710: 30 2c 35 29 3c 62 72 3e 0a 20 20 42 4f 4f 4c 45  0,5)<br>.  BOOLE
2720: 41 4e 3c 62 72 3e 0a 20 20 44 41 54 45 3c 62 72  AN<br>.  DATE<br
2730: 3e 0a 20 20 44 41 54 45 54 49 4d 45 0a 3c 74 64  >.  DATETIME.<td
2740: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
2750: 4e 55 4d 45 52 49 43 0a 3c 74 64 20 61 6c 69 67  NUMERIC.<td alig
2760: 6e 3d 22 63 65 6e 74 65 72 22 3e 35 0a 3c 2f 74  n="center">5.</t
2770: 61 62 6c 65 3e 29 5e 0a 3c 2f 62 6c 6f 63 6b 71  able>)^.</blockq
2780: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20  uote>..<p>^Note 
2790: 74 68 61 74 20 61 20 64 65 63 6c 61 72 65 64 20  that a declared 
27a0: 74 79 70 65 20 6f 66 20 22 46 4c 4f 41 54 49 4e  type of "FLOATIN
27b0: 47 20 50 4f 49 4e 54 22 20 77 6f 75 6c 64 20 67  G POINT" would g
27c0: 69 76 65 20 49 4e 54 45 47 45 52 0a 61 66 66 69  ive INTEGER.affi
27d0: 6e 69 74 79 2c 20 6e 6f 74 20 52 45 41 4c 20 61  nity, not REAL a
27e0: 66 66 69 6e 69 74 79 2c 20 64 75 65 20 74 6f 20  ffinity, due to 
27f0: 74 68 65 20 22 49 4e 54 22 20 61 74 20 74 68 65  the "INT" at the
2800: 20 65 6e 64 20 6f 66 20 22 50 4f 49 4e 54 22 2e   end of "POINT".
2810: 0a 5e 41 6e 64 20 74 68 65 20 64 65 63 6c 61 72  .^And the declar
2820: 65 64 20 74 79 70 65 20 6f 66 20 22 53 54 52 49  ed type of "STRI
2830: 4e 47 22 20 68 61 73 20 61 6e 20 61 66 66 69 6e  NG" has an affin
2840: 69 74 79 20 6f 66 20 4e 55 4d 45 52 49 43 2c 20  ity of NUMERIC, 
2850: 6e 6f 74 20 54 45 58 54 2e 0a 0a 3c 74 63 6c 3e  not TEXT...<tcl>
2860: 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 78 70 72  hd_fragment expr
2870: 61 66 66 20 7b 65 78 70 72 65 73 73 69 6f 6e 20  aff {expression 
2880: 61 66 66 69 6e 69 74 79 7d 20 7b 41 66 66 69 6e  affinity} {Affin
2890: 69 74 79 20 4f 66 20 45 78 70 72 65 73 73 69 6f  ity Of Expressio
28a0: 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 41 66  ns}</tcl>.<h2>Af
28b0: 66 69 6e 69 74 79 20 4f 66 20 45 78 70 72 65 73  finity Of Expres
28c0: 73 69 6f 6e 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 45  sions</h2>..<p>E
28d0: 76 65 72 79 20 74 61 62 6c 65 20 63 6f 6c 75 6d  very table colum
28e0: 6e 20 68 61 73 20 61 20 74 79 70 65 20 61 66 66  n has a type aff
28f0: 69 6e 69 74 79 20 28 6f 6e 65 20 6f 66 20 42 4c  inity (one of BL
2900: 4f 42 2c 20 54 45 58 54 2c 20 49 4e 54 45 47 45  OB, TEXT, INTEGE
2910: 52 2c 0a 52 45 41 4c 2c 20 6f 72 20 4e 55 4d 45  R,.REAL, or NUME
2920: 52 49 43 29 20 62 75 74 20 65 78 70 72 65 73 73  RIC) but express
2930: 69 6f 6e 73 20 64 6f 20 6e 6f 20 6e 65 63 65 73  ions do no neces
2940: 73 61 72 69 6c 79 20 68 61 76 65 20 61 6e 20 61  sarily have an a
2950: 66 66 69 6e 69 74 79 2e 0a 0a 3c 70 3e 45 78 70  ffinity...<p>Exp
2960: 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79  ression affinity
2970: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2980: 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  y the following 
2990: 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c  rules:..<ul>.  <
29a0: 6c 69 3e 3c 70 3e 5e 54 68 65 20 72 69 67 68 74  li><p>^The right
29b0: 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66  -hand operand of
29c0: 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
29d0: 0a 20 20 6f 70 65 72 61 74 6f 72 20 68 61 73 20  .  operator has 
29e0: 6e 6f 20 61 66 66 69 6e 69 74 79 20 69 66 20 74  no affinity if t
29f0: 68 65 20 6f 70 65 72 61 6e 64 20 69 73 20 61 20  he operand is a 
2a00: 6c 69 73 74 20 61 6e 64 20 68 61 73 20 74 68 65  list and has the
2a10: 20 73 61 6d 65 0a 20 20 61 66 66 69 6e 69 74 79   same.  affinity
2a20: 20 61 73 20 74 68 65 20 61 66 66 69 6e 69 74 79   as the affinity
2a30: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   of the result s
2a40: 65 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 66  et expression if
2a50: 20 74 68 65 20 6f 70 65 72 61 6e 64 0a 20 20 69   the operand.  i
2a60: 73 20 61 20 53 45 4c 45 43 54 2e 0a 0a 20 20 3c  s a SELECT...  <
2a70: 6c 69 3e 3c 70 3e 5e 57 68 65 6e 20 61 6e 20 65  li><p>^When an e
2a80: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
2a90: 69 6d 70 6c 65 20 72 65 66 65 72 65 6e 63 65 20  imple reference 
2aa0: 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  to a column of a
2ab0: 0a 20 20 72 65 61 6c 20 74 61 62 6c 65 20 28 6e  .  real table (n
2ac0: 6f 74 20 61 20 5b 56 49 45 57 5d 20 6f 72 20 73  ot a [VIEW] or s
2ad0: 75 62 71 75 65 72 79 29 20 74 68 65 6e 20 74 68  ubquery) then th
2ae0: 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 68  e expression.  h
2af0: 61 73 20 74 68 65 20 73 61 6d 65 20 61 66 66 69  as the same affi
2b00: 6e 69 74 79 20 61 73 20 74 68 65 20 74 61 62 6c  nity as the tabl
2b10: 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 3c 75 6c 3e  e column..  <ul>
2b20: 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 50 61 72 65  .  <li><p>^(Pare
2b30: 6e 74 68 65 73 65 73 20 61 72 6f 75 6e 64 20 74  ntheses around t
2b40: 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61  he column name a
2b50: 72 65 20 69 67 6e 6f 72 65 64 2e 20 20 48 65 6e  re ignored.  Hen
2b60: 63 65 20 69 66 0a 20 20 58 20 61 6e 64 20 59 2e  ce if.  X and Y.
2b70: 5a 20 61 72 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  Z are column nam
2b80: 65 73 2c 20 74 68 65 6e 20 28 58 29 20 61 6e 64  es, then (X) and
2b90: 20 28 59 2e 5a 29 20 61 72 65 20 61 6c 73 6f 20   (Y.Z) are also 
2ba0: 63 6f 6e 73 69 64 65 72 65 64 0a 20 20 63 6f 6c  considered.  col
2bb0: 75 6d 6e 20 6e 61 6d 65 73 20 61 6e 64 20 68 61  umn names and ha
2bc0: 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
2bd0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
2be0: 64 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a  ding columns.)^.
2bf0: 20 20 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 41 6e    <li><p>.  ^(An
2c00: 79 20 6f 70 65 72 61 74 6f 72 73 20 61 70 70 6c  y operators appl
2c10: 69 65 64 20 74 6f 20 63 6f 6c 75 6d 6e 20 6e 61  ied to column na
2c20: 6d 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74  mes, including t
2c30: 68 65 20 6e 6f 2d 6f 70 20 0a 20 20 20 75 6e 61  he no-op .   una
2c40: 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 2c  ry "+" operator,
2c50: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 63 6f 6c   convert the col
2c60: 75 6d 6e 20 6e 61 6d 65 20 69 6e 74 6f 20 61 6e  umn name into an
2c70: 20 65 78 70 72 65 73 73 69 6f 6e 20 77 68 69 63   expression whic
2c80: 68 0a 20 20 20 61 6c 77 61 79 73 20 68 61 73 20  h.   always has 
2c90: 6e 6f 20 61 66 66 69 6e 69 74 79 2e 20 20 48 65  no affinity.  He
2ca0: 6e 63 65 20 65 76 65 6e 20 69 66 20 58 20 61 6e  nce even if X an
2cb0: 64 20 59 2e 5a 20 61 72 65 20 63 6f 6c 75 6d 6e  d Y.Z are column
2cc0: 20 6e 61 6d 65 73 2c 20 74 68 65 0a 20 20 20 65   names, the.   e
2cd0: 78 70 72 65 73 73 69 6f 6e 73 20 2b 58 20 61 6e  xpressions +X an
2ce0: 64 20 2b 59 2e 5a 20 61 72 65 20 6e 6f 74 20 63  d +Y.Z are not c
2cf0: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 6e 64 20  olumn names and 
2d00: 68 61 76 65 20 6e 6f 20 61 66 66 69 6e 69 74 79  have no affinity
2d10: 2e 29 5e 0a 20 20 3c 2f 75 6c 3e 0a 0a 20 20 3c  .)^.  </ul>..  <
2d20: 6c 69 3e 3c 70 3e 5e 28 41 6e 20 65 78 70 72 65  li><p>^(An expre
2d30: 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
2d40: 6d 20 22 43 41 53 54 28 3c 69 3e 65 78 70 72 3c  m "CAST(<i>expr<
2d50: 2f 69 3e 20 41 53 20 3c 69 3e 74 79 70 65 3c 2f  /i> AS <i>type</
2d60: 69 3e 29 22 0a 20 20 68 61 73 20 61 6e 20 61 66  i>)".  has an af
2d70: 66 69 6e 69 74 79 20 74 68 61 74 20 69 73 20 74  finity that is t
2d80: 68 65 20 73 61 6d 65 20 61 73 20 61 20 63 6f 6c  he same as a col
2d90: 75 6d 6e 20 77 69 74 68 20 61 20 64 65 63 6c 61  umn with a decla
2da0: 72 65 64 0a 20 20 74 79 70 65 20 6f 66 20 22 3c  red.  type of "<
2db0: 69 3e 74 79 70 65 3c 2f 69 3e 22 2e 29 5e 0a 0a  i>type</i>".)^..
2dc0: 20 20 3c 6c 69 3e 3c 70 3e 5e 41 20 43 4f 4c 4c    <li><p>^A COLL
2dd0: 41 54 45 20 6f 70 65 72 61 74 6f 72 20 68 61 73  ATE operator has
2de0: 20 74 68 65 20 73 61 6d 65 20 61 66 66 69 6e 69   the same affini
2df0: 74 79 20 61 73 20 69 74 73 20 6c 65 66 74 2d 68  ty as its left-h
2e00: 61 6e 64 20 73 69 64 65 20 6f 70 65 72 61 6e 64  and side operand
2e10: 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68  ...  <li><p>^Oth
2e20: 65 72 77 69 73 65 2c 20 61 6e 20 65 78 70 72 65  erwise, an expre
2e30: 73 73 69 6f 6e 20 68 61 73 20 6e 6f 20 61 66 66  ssion has no aff
2e40: 69 6e 69 74 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74  inity..</ul>..<t
2e50: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61  cl>hd_fragment a
2e60: 66 66 76 69 65 77 20 7b 72 75 6c 65 73 20 66 6f  ffview {rules fo
2e70: 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f  r determining co
2e80: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 69 6e  lumn affinity in
2e90: 20 56 49 45 57 73 7d 3c 2f 74 63 6c 3e 0a 3c 68   VIEWs}</tcl>.<h
2ea0: 32 3e 43 6f 6c 75 6d 6e 20 41 66 66 69 6e 69 74  2>Column Affinit
2eb0: 79 20 46 6f 72 20 56 69 65 77 73 20 41 6e 64 20  y For Views And 
2ec0: 53 75 62 71 75 65 72 69 65 73 3c 2f 68 32 3e 0a  Subqueries</h2>.
2ed0: 0a 3c 70 3e 54 68 65 20 22 63 6f 6c 75 6d 6e 73  .<p>The "columns
2ee0: 22 20 6f 66 20 61 20 5b 56 49 45 57 5d 20 6f 72  " of a [VIEW] or
2ef0: 20 46 52 4f 4d 2d 63 6c 61 75 73 65 20 73 75 62   FROM-clause sub
2f00: 71 75 65 72 79 20 61 72 65 20 72 65 61 6c 6c 79  query are really
2f10: 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73  .the expressions
2f20: 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73  .in the result s
2f30: 65 74 20 6f 66 20 74 68 65 20 5b 53 45 4c 45 43  et of the [SELEC
2f40: 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  T] statement tha
2f50: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
2f60: 20 56 49 45 57 0a 6f 72 20 73 75 62 71 75 65 72   VIEW.or subquer
2f70: 79 2e 20 20 54 68 75 73 2c 20 74 68 65 20 61 66  y.  Thus, the af
2f80: 66 69 6e 69 74 79 20 66 6f 72 20 63 6f 6c 75 6d  finity for colum
2f90: 6e 73 20 6f 66 20 61 20 56 49 45 57 20 6f 72 20  ns of a VIEW or 
2fa0: 73 75 62 71 75 65 72 79 0a 61 72 65 20 64 65 74  subquery.are det
2fb0: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 65  ermined by the e
2fc0: 78 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69  xpression affini
2fd0: 74 79 20 72 75 6c 65 73 20 61 62 6f 76 65 2e 0a  ty rules above..
2fe0: 43 6f 6e 73 69 64 65 72 20 61 6e 20 65 78 61 6d  Consider an exam
2ff0: 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
3000: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
3010: 41 42 4c 45 20 74 31 28 61 20 49 4e 54 2c 20 62  ABLE t1(a INT, b
3020: 20 54 45 58 54 2c 20 63 20 52 45 41 4c 29 3b 0a   TEXT, c REAL);.
3030: 43 52 45 41 54 45 20 56 49 45 57 20 76 31 28 78  CREATE VIEW v1(x
3040: 2c 79 2c 7a 29 20 41 53 20 53 45 4c 45 43 54 20  ,y,z) AS SELECT 
3050: 62 2c 20 61 2b 63 2c 20 34 32 20 46 52 4f 4d 20  b, a+c, 42 FROM 
3060: 74 31 20 57 48 45 52 45 20 62 21 3d 31 31 3b 0a  t1 WHERE b!=11;.
3070: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
3080: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 61 66 66 69  te>..<p>The affi
3090: 6e 69 74 79 20 6f 66 20 74 68 65 20 76 31 2e 78  nity of the v1.x
30a0: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20   column will be 
30b0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
30c0: 61 66 66 69 6e 69 74 79 0a 6f 66 20 74 31 2e 62  affinity.of t1.b
30d0: 20 28 54 45 58 54 29 2c 20 73 69 6e 63 65 20 76   (TEXT), since v
30e0: 31 2e 78 20 6d 61 70 73 20 64 69 72 65 63 74 6c  1.x maps directl
30f0: 79 20 69 6e 74 6f 20 74 31 2e 62 2e 20 20 42 75  y into t1.b.  Bu
3100: 74 0a 63 6f 6c 75 6d 6e 73 20 76 31 2e 79 20 61  t.columns v1.y a
3110: 6e 64 20 76 31 2e 7a 20 62 6f 74 68 20 68 61 76  nd v1.z both hav
3120: 65 20 6e 6f 20 61 66 66 69 6e 69 74 79 2c 20 73  e no affinity, s
3130: 69 6e 63 65 20 74 68 6f 73 65 20 63 6f 6c 75 6d  ince those colum
3140: 6e 73 0a 6d 61 70 20 69 6e 74 6f 20 65 78 70 72  ns.map into expr
3150: 65 73 73 69 6f 6e 20 61 2b 63 20 61 6e 64 20 34  ession a+c and 4
3160: 32 2c 20 61 6e 64 20 65 78 70 72 65 73 73 69 6f  2, and expressio
3170: 6e 73 20 61 6c 77 61 79 73 20 68 61 76 65 20 6e  ns always have n
3180: 6f 0a 61 66 66 69 6e 69 74 79 2e 0a 0a 3c 70 3e  o.affinity...<p>
3190: 57 68 65 6e 20 74 68 65 20 5b 53 45 4c 45 43 54  When the [SELECT
31a0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  ] statement that
31b0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 5b 56   implements a [V
31c0: 49 45 57 5d 20 6f 72 20 0a 46 52 4f 4d 2d 63 6c  IEW] or .FROM-cl
31d0: 61 75 73 65 20 73 75 62 71 75 65 72 79 20 69 73  ause subquery is
31e0: 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31f0: 45 43 54 5d 20 74 68 65 6e 20 74 68 65 20 61 66  ECT] then the af
3200: 66 69 6e 69 74 79 20 6f 66 20 0a 65 61 63 68 20  finity of .each 
3210: 73 75 70 70 6f 73 65 64 20 63 6f 6c 75 6d 6e 20  supposed column 
3220: 6f 66 20 74 68 65 20 56 49 45 57 20 6f 72 20 73  of the VIEW or s
3230: 75 62 71 75 65 72 79 20 77 69 6c 6c 0a 62 65 20  ubquery will.be 
3240: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
3250: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
3260: 67 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  g result column 
3270: 66 6f 72 0a 6f 6e 65 20 6f 66 20 74 68 65 20 69  for.one of the i
3280: 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54  ndividual SELECT
3290: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
32a0: 20 6d 61 6b 65 20 75 70 20 0a 74 68 65 20 63 6f   make up .the co
32b0: 6d 70 6f 75 6e 64 2e 20 20 0a 48 6f 77 65 76 65  mpound.  .Howeve
32c0: 72 2c 20 69 74 20 69 73 20 69 6e 64 65 74 65 72  r, it is indeter
32d0: 6d 69 6e 61 74 65 20 77 68 69 63 68 20 6f 66 20  minate which of 
32e0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
32f0: 6d 65 6e 74 73 20 77 69 6c 6c 20 0a 62 65 20 75  ments will .be u
3300: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
3310: 20 61 66 66 69 6e 69 74 79 2e 0a 44 69 66 66 65   affinity..Diffe
3320: 72 65 6e 74 20 63 6f 6e 73 74 69 74 75 65 6e 74  rent constituent
3330: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
3340: 74 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  ts might be used
3350: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 61   to determine .a
3360: 66 66 69 6e 69 74 79 20 61 74 20 64 69 66 66 65  ffinity at diffe
3370: 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
3380: 67 20 71 75 65 72 79 20 65 76 61 6c 75 61 74 69  g query evaluati
3390: 6f 6e 2e 0a 42 65 73 74 20 70 72 61 63 74 69 63  on..Best practic
33a0: 65 20 69 73 20 74 6f 20 61 76 6f 69 64 20 6d 69  e is to avoid mi
33b0: 78 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 20  xing affinities 
33c0: 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  in a compound SE
33d0: 4c 45 43 54 2e 0a 0a 0a 3c 68 32 3e 43 6f 6c 75  LECT....<h2>Colu
33e0: 6d 6e 20 41 66 66 69 6e 69 74 79 20 42 65 68 61  mn Affinity Beha
33f0: 76 69 6f 72 20 45 78 61 6d 70 6c 65 3c 2f 68 32  vior Example</h2
3400: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
3410: 69 6e 67 20 53 51 4c 20 64 65 6d 6f 6e 73 74 72  ing SQL demonstr
3420: 61 74 65 73 20 68 6f 77 20 53 51 4c 69 74 65 20  ates how SQLite 
3430: 75 73 65 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69  uses column affi
3440: 6e 69 74 79 0a 74 6f 20 64 6f 20 74 79 70 65 20  nity.to do type 
3450: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 77 68 65 6e  conversions when
3460: 20 76 61 6c 75 65 73 20 61 72 65 20 69 6e 73 65   values are inse
3470: 72 74 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c  rted into a tabl
3480: 65 2e 3c 2f 70 3e 0a 0a 5e 28 3c 62 6c 6f 63 6b  e.</p>..^(<block
3490: 71 75 6f 74 65 3e 0a 3c 70 72 65 3e 0a 43 52 45  quote>.<pre>.CRE
34a0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20  ATE TABLE t1(.  
34b0: 20 20 74 20 20 54 45 58 54 2c 20 20 20 20 20 2d    t  TEXT,     -
34c0: 2d 20 74 65 78 74 20 61 66 66 69 6e 69 74 79 20  - text affinity 
34d0: 62 79 20 72 75 6c 65 20 32 0a 20 20 20 20 6e 75  by rule 2.    nu
34e0: 20 4e 55 4d 45 52 49 43 2c 20 20 2d 2d 20 6e 75   NUMERIC,  -- nu
34f0: 6d 65 72 69 63 20 61 66 66 69 6e 69 74 79 20 62  meric affinity b
3500: 79 20 72 75 6c 65 20 35 0a 20 20 20 20 69 20 20  y rule 5.    i  
3510: 49 4e 54 45 47 45 52 2c 20 20 2d 2d 20 69 6e 74  INTEGER,  -- int
3520: 65 67 65 72 20 61 66 66 69 6e 69 74 79 20 62 79  eger affinity by
3530: 20 72 75 6c 65 20 31 0a 20 20 20 20 72 20 20 52   rule 1.    r  R
3540: 45 41 4c 2c 20 20 20 20 20 2d 2d 20 72 65 61 6c  EAL,     -- real
3550: 20 61 66 66 69 6e 69 74 79 20 62 79 20 72 75 6c   affinity by rul
3560: 65 20 34 0a 20 20 20 20 6e 6f 20 42 4c 4f 42 20  e 4.    no BLOB 
3570: 20 20 20 20 20 2d 2d 20 6e 6f 20 61 66 66 69 6e       -- no affin
3580: 69 74 79 20 62 79 20 72 75 6c 65 20 33 0a 29 3b  ity by rule 3.);
3590: 0a 0a 2d 2d 20 56 61 6c 75 65 73 20 73 74 6f 72  ..-- Values stor
35a0: 65 64 20 61 73 20 54 45 58 54 2c 20 49 4e 54 45  ed as TEXT, INTE
35b0: 47 45 52 2c 20 49 4e 54 45 47 45 52 2c 20 52 45  GER, INTEGER, RE
35c0: 41 4c 2c 20 54 45 58 54 2e 0a 49 4e 53 45 52 54  AL, TEXT..INSERT
35d0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
35e0: 27 35 30 30 2e 30 27 2c 20 27 35 30 30 2e 30 27  '500.0', '500.0'
35f0: 2c 20 27 35 30 30 2e 30 27 2c 20 27 35 30 30 2e  , '500.0', '500.
3600: 30 27 2c 20 27 35 30 30 2e 30 27 29 3b 0a 53 45  0', '500.0');.SE
3610: 4c 45 43 54 20 74 79 70 65 6f 66 28 74 29 2c 20  LECT typeof(t), 
3620: 74 79 70 65 6f 66 28 6e 75 29 2c 20 74 79 70 65  typeof(nu), type
3630: 6f 66 28 69 29 2c 20 74 79 70 65 6f 66 28 72 29  of(i), typeof(r)
3640: 2c 20 74 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f  , typeof(no) FRO
3650: 4d 20 74 31 3b 0a 74 65 78 74 7c 69 6e 74 65 67  M t1;.text|integ
3660: 65 72 7c 69 6e 74 65 67 65 72 7c 72 65 61 6c 7c  er|integer|real|
3670: 74 65 78 74 0a 0a 2d 2d 20 56 61 6c 75 65 73 20  text..-- Values 
3680: 73 74 6f 72 65 64 20 61 73 20 54 45 58 54 2c 20  stored as TEXT, 
3690: 49 4e 54 45 47 45 52 2c 20 49 4e 54 45 47 45 52  INTEGER, INTEGER
36a0: 2c 20 52 45 41 4c 2c 20 52 45 41 4c 2e 0a 44 45  , REAL, REAL..DE
36b0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 49 4e  LETE FROM t1;.IN
36c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
36d0: 55 45 53 28 35 30 30 2e 30 2c 20 35 30 30 2e 30  UES(500.0, 500.0
36e0: 2c 20 35 30 30 2e 30 2c 20 35 30 30 2e 30 2c 20  , 500.0, 500.0, 
36f0: 35 30 30 2e 30 29 3b 0a 53 45 4c 45 43 54 20 74  500.0);.SELECT t
3700: 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f 66  ypeof(t), typeof
3710: 28 6e 75 29 2c 20 74 79 70 65 6f 66 28 69 29 2c  (nu), typeof(i),
3720: 20 74 79 70 65 6f 66 28 72 29 2c 20 74 79 70 65   typeof(r), type
3730: 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74 31 3b 0a  of(no) FROM t1;.
3740: 74 65 78 74 7c 69 6e 74 65 67 65 72 7c 69 6e 74  text|integer|int
3750: 65 67 65 72 7c 72 65 61 6c 7c 72 65 61 6c 0a 0a  eger|real|real..
3760: 2d 2d 20 56 61 6c 75 65 73 20 73 74 6f 72 65 64  -- Values stored
3770: 20 61 73 20 54 45 58 54 2c 20 49 4e 54 45 47 45   as TEXT, INTEGE
3780: 52 2c 20 49 4e 54 45 47 45 52 2c 20 52 45 41 4c  R, INTEGER, REAL
3790: 2c 20 49 4e 54 45 47 45 52 2e 0a 44 45 4c 45 54  , INTEGER..DELET
37a0: 45 20 46 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52  E FROM t1;.INSER
37b0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
37c0: 28 35 30 30 2c 20 35 30 30 2c 20 35 30 30 2c 20  (500, 500, 500, 
37d0: 35 30 30 2c 20 35 30 30 29 3b 0a 53 45 4c 45 43  500, 500);.SELEC
37e0: 54 20 74 79 70 65 6f 66 28 74 29 2c 20 74 79 70  T typeof(t), typ
37f0: 65 6f 66 28 6e 75 29 2c 20 74 79 70 65 6f 66 28  eof(nu), typeof(
3800: 69 29 2c 20 74 79 70 65 6f 66 28 72 29 2c 20 74  i), typeof(r), t
3810: 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74  ypeof(no) FROM t
3820: 31 3b 0a 74 65 78 74 7c 69 6e 74 65 67 65 72 7c  1;.text|integer|
3830: 69 6e 74 65 67 65 72 7c 72 65 61 6c 7c 69 6e 74  integer|real|int
3840: 65 67 65 72 0a 0a 2d 2d 20 42 4c 4f 42 73 20 61  eger..-- BLOBs a
3850: 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64  re always stored
3860: 20 61 73 20 42 4c 4f 42 73 20 72 65 67 61 72 64   as BLOBs regard
3870: 6c 65 73 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 61  less of column a
3880: 66 66 69 6e 69 74 79 2e 0a 44 45 4c 45 54 45 20  ffinity..DELETE 
3890: 46 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52 54 20  FROM t1;.INSERT 
38a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 78  INTO t1 VALUES(x
38b0: 27 30 35 30 30 27 2c 20 78 27 30 35 30 30 27 2c  '0500', x'0500',
38c0: 20 78 27 30 35 30 30 27 2c 20 78 27 30 35 30 30   x'0500', x'0500
38d0: 27 2c 20 78 27 30 35 30 30 27 29 3b 0a 53 45 4c  ', x'0500');.SEL
38e0: 45 43 54 20 74 79 70 65 6f 66 28 74 29 2c 20 74  ECT typeof(t), t
38f0: 79 70 65 6f 66 28 6e 75 29 2c 20 74 79 70 65 6f  ypeof(nu), typeo
3900: 66 28 69 29 2c 20 74 79 70 65 6f 66 28 72 29 2c  f(i), typeof(r),
3910: 20 74 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f 4d   typeof(no) FROM
3920: 20 74 31 3b 0a 62 6c 6f 62 7c 62 6c 6f 62 7c 62   t1;.blob|blob|b
3930: 6c 6f 62 7c 62 6c 6f 62 7c 62 6c 6f 62 0a 0a 2d  lob|blob|blob..-
3940: 2d 20 4e 55 4c 4c 73 20 61 72 65 20 61 6c 73 6f  - NULLs are also
3950: 20 75 6e 61 66 66 65 63 74 65 64 20 62 79 20 61   unaffected by a
3960: 66 66 69 6e 69 74 79 0a 44 45 4c 45 54 45 20 46  ffinity.DELETE F
3970: 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52 54 20 49  ROM t1;.INSERT I
3980: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
3990: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c  LL,NULL,NULL,NUL
39a0: 4c 2c 4e 55 4c 4c 29 3b 0a 53 45 4c 45 43 54 20  L,NULL);.SELECT 
39b0: 74 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f  typeof(t), typeo
39c0: 66 28 6e 75 29 2c 20 74 79 70 65 6f 66 28 69 29  f(nu), typeof(i)
39d0: 2c 20 74 79 70 65 6f 66 28 72 29 2c 20 74 79 70  , typeof(r), typ
39e0: 65 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74 31 3b  eof(no) FROM t1;
39f0: 0a 6e 75 6c 6c 7c 6e 75 6c 6c 7c 6e 75 6c 6c 7c  .null|null|null|
3a00: 6e 75 6c 6c 7c 6e 75 6c 6c 0a 3c 2f 70 72 65 3e  null|null.</pre>
3a10: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
3a20: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3a30: 6e 74 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 7b  nt comparisons {
3a40: 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
3a50: 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ssions}</tcl>.<h
3a60: 31 3e 43 6f 6d 70 61 72 69 73 6f 6e 20 45 78 70  1>Comparison Exp
3a70: 72 65 73 73 69 6f 6e 73 3c 2f 68 31 3e 0a 0a 3c  ressions</h1>..<
3a80: 70 3e 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  p>SQLite version
3a90: 20 33 20 68 61 73 20 74 68 65 20 75 73 75 61 6c   3 has the usual
3aa0: 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6d 70   set of SQL comp
3ab0: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
3ac0: 0a 69 6e 63 6c 75 64 69 6e 67 20 22 3d 22 2c 20  .including "=", 
3ad0: 22 3d 3d 22 2c 20 22 26 6c 74 3b 22 2c 20 22 26  "==", "&lt;", "&
3ae0: 6c 74 3b 3d 22 2c 20 22 26 67 74 3b 22 2c 20 22  lt;=", "&gt;", "
3af0: 26 67 74 3b 3d 22 2c 20 22 21 3d 22 2c 20 22 3c  &gt;=", "!=", "<
3b00: 3e 22 2c 0a 22 49 4e 22 2c 20 22 4e 4f 54 20 49  >",."IN", "NOT I
3b10: 4e 22 2c 20 22 42 45 54 57 45 45 4e 22 2c 20 22  N", "BETWEEN", "
3b20: 49 53 22 2c 20 61 6e 64 20 22 49 53 20 4e 4f 54  IS", and "IS NOT
3b30: 22 2c 20 2e 0a 0a 3c 68 32 3e 53 6f 72 74 20 4f  ", ...<h2>Sort O
3b40: 72 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rder</h2>..<p>Th
3b50: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  e results of a c
3b60: 6f 6d 70 61 72 69 73 6f 6e 20 64 65 70 65 6e 64  omparison depend
3b70: 20 6f 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20   on the storage 
3b80: 63 6c 61 73 73 65 73 20 6f 66 20 74 68 65 0a 6f  classes of the.o
3b90: 70 65 72 61 6e 64 73 2c 20 61 63 63 6f 72 64 69  perands, accordi
3ba0: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
3bb0: 69 6e 67 20 72 75 6c 65 73 3a 3c 2f 70 3e 0a 3c  ing rules:</p>.<
3bc0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 41 20  ul>.  <li><p>^A 
3bd0: 76 61 6c 75 65 20 77 69 74 68 20 73 74 6f 72 61  value with stora
3be0: 67 65 20 63 6c 61 73 73 20 4e 55 4c 4c 20 69 73  ge class NULL is
3bf0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
3c00: 20 74 68 61 6e 20 61 6e 79 0a 20 20 6f 74 68 65   than any.  othe
3c10: 72 20 76 61 6c 75 65 20 28 69 6e 63 6c 75 64 69  r value (includi
3c20: 6e 67 20 61 6e 6f 74 68 65 72 20 76 61 6c 75 65  ng another value
3c30: 20 77 69 74 68 20 73 74 6f 72 61 67 65 20 63 6c   with storage cl
3c40: 61 73 73 20 4e 55 4c 4c 29 2e 3c 2f 70 3e 0a 0a  ass NULL).</p>..
3c50: 20 20 3c 6c 69 3e 3c 70 3e 5e 41 6e 20 49 4e 54    <li><p>^An INT
3c60: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c  EGER or REAL val
3c70: 75 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ue is less than 
3c80: 61 6e 79 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  any TEXT or BLOB
3c90: 20 76 61 6c 75 65 2e 0a 20 20 5e 57 68 65 6e 20   value..  ^When 
3ca0: 61 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  an INTEGER or RE
3cb0: 41 4c 20 69 73 20 63 6f 6d 70 61 72 65 64 20 74  AL is compared t
3cc0: 6f 20 61 6e 6f 74 68 65 72 20 49 4e 54 45 47 45  o another INTEGE
3cd0: 52 20 6f 72 20 52 45 41 4c 2c 20 61 0a 20 20 6e  R or REAL, a.  n
3ce0: 75 6d 65 72 69 63 61 6c 20 63 6f 6d 70 61 72 69  umerical compari
3cf0: 73 6f 6e 20 69 73 20 70 65 72 66 6f 72 6d 65 64  son is performed
3d00: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
3d10: 5e 41 20 54 45 58 54 20 76 61 6c 75 65 20 69 73  ^A TEXT value is
3d20: 20 6c 65 73 73 20 74 68 61 6e 20 61 20 42 4c 4f   less than a BLO
3d30: 42 20 76 61 6c 75 65 2e 20 20 5e 57 68 65 6e 20  B value.  ^When 
3d40: 74 77 6f 20 54 45 58 54 20 76 61 6c 75 65 73 0a  two TEXT values.
3d50: 20 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 61    are compared a
3d60: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  n appropriate co
3d70: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
3d80: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
3d90: 72 6d 69 6e 65 20 0a 20 20 74 68 65 20 72 65 73  rmine .  the res
3da0: 75 6c 74 2e 20 20 3c 2f 70 3e 0a 0a 20 20 3c 6c  ult.  </p>..  <l
3db0: 69 3e 3c 70 3e 5e 57 68 65 6e 20 74 77 6f 20 42  i><p>^When two B
3dc0: 4c 4f 42 20 76 61 6c 75 65 73 20 61 72 65 20 63  LOB values are c
3dd0: 6f 6d 70 61 72 65 64 2c 20 74 68 65 20 72 65 73  ompared, the res
3de0: 75 6c 74 20 69 73 0a 20 20 64 65 74 65 72 6d 69  ult is.  determi
3df0: 6e 65 64 20 75 73 69 6e 67 20 6d 65 6d 63 6d 70  ned using memcmp
3e00: 28 29 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  ().</p>.</ul>..<
3e10: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
3e20: 63 6f 6d 70 61 66 66 20 7b 63 6f 6d 70 61 72 69  compaff {compari
3e30: 73 6f 6e 20 61 66 66 69 6e 69 74 79 20 72 75 6c  son affinity rul
3e40: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 54 79  es}</tcl>.<h2>Ty
3e50: 70 65 20 43 6f 6e 76 65 72 73 69 6f 6e 73 20 50  pe Conversions P
3e60: 72 69 6f 72 20 54 6f 20 43 6f 6d 70 61 72 69 73  rior To Comparis
3e70: 6f 6e 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 53 51 4c  on</h2>..<p>^SQL
3e80: 69 74 65 20 6d 61 79 20 61 74 74 65 6d 70 74 20  ite may attempt 
3e90: 74 6f 20 63 6f 6e 76 65 72 74 20 76 61 6c 75 65  to convert value
3ea0: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 73 74  s between the st
3eb0: 6f 72 61 67 65 20 63 6c 61 73 73 65 73 0a 49 4e  orage classes.IN
3ec0: 54 45 47 45 52 2c 20 52 45 41 4c 2c 20 61 6e 64  TEGER, REAL, and
3ed0: 2f 6f 72 20 54 45 58 54 20 62 65 66 6f 72 65 20  /or TEXT before 
3ee0: 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 63 6f 6d  performing a com
3ef0: 70 61 72 69 73 6f 6e 2e 0a 5e 57 68 65 74 68 65  parison..^Whethe
3f00: 72 20 6f 72 20 6e 6f 74 20 61 6e 79 20 63 6f 6e  r or not any con
3f10: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 61 74 74  versions are att
3f20: 65 6d 70 74 65 64 20 62 65 66 6f 72 65 20 74 68  empted before th
3f30: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 74 61 6b  e comparison tak
3f40: 65 73 0a 70 6c 61 63 65 20 64 65 70 65 6e 64 73  es.place depends
3f50: 20 6f 6e 20 74 68 65 20 74 79 70 65 20 61 66 66   on the type aff
3f60: 69 6e 69 74 79 20 6f 66 20 74 68 65 20 6f 70 65  inity of the ope
3f70: 72 61 6e 64 73 2e 0a 0a 3c 70 3e 54 6f 20 22 61  rands...<p>To "a
3f80: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 22 20 6d  pply affinity" m
3f90: 65 61 6e 73 20 74 6f 20 63 6f 6e 76 65 72 74 20  eans to convert 
3fa0: 61 6e 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  an operand to a 
3fb0: 70 61 72 74 69 63 75 6c 61 72 20 73 74 6f 72 61  particular stora
3fc0: 67 65 0a 63 6c 61 73 73 20 69 66 20 61 6e 64 20  ge.class if and 
3fd0: 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e 76  only if the conv
3fe0: 65 72 73 69 6f 6e 20 69 73 20 6c 6f 73 73 6c 65  ersion is lossle
3ff0: 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
4000: 65 2e 0a 5e 28 41 66 66 69 6e 69 74 79 20 69 73  e..^(Affinity is
4010: 20 61 70 70 6c 69 65 64 20 74 6f 20 6f 70 65 72   applied to oper
4020: 61 6e 64 73 20 6f 66 20 61 20 63 6f 6d 70 61 72  ands of a compar
4030: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 70 72  ison operator pr
4040: 69 6f 72 20 74 6f 0a 74 68 65 20 63 6f 6d 70 61  ior to.the compa
4050: 72 69 73 6f 6e 20 61 63 63 6f 72 64 69 6e 67 20  rison according 
4060: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
4070: 20 72 75 6c 65 73 20 69 6e 20 74 68 65 20 6f 72   rules in the or
4080: 64 65 72 20 73 68 6f 77 6e 3a 29 5e 3c 2f 70 3e  der shown:)^</p>
4090: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
40a0: 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 68 61  f one operand ha
40b0: 73 20 49 4e 54 45 47 45 52 2c 20 52 45 41 4c 20  s INTEGER, REAL 
40c0: 6f 72 20 4e 55 4d 45 52 49 43 20 61 66 66 69 6e  or NUMERIC affin
40d0: 69 74 79 0a 61 6e 64 20 74 68 65 20 6f 74 68 65  ity.and the othe
40e0: 72 20 6f 70 65 72 61 6e 64 20 68 61 73 20 54 45  r operand has TE
40f0: 58 54 20 6f 72 20 42 4c 4f 42 20 6f 72 20 6e 6f  XT or BLOB or no
4100: 20 61 66 66 69 6e 69 74 79 0a 74 68 65 6e 20 4e   affinity.then N
4110: 55 4d 45 52 49 43 20 61 66 66 69 6e 69 74 79 20  UMERIC affinity 
4120: 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 6f 74  is applied to ot
4130: 68 65 72 20 6f 70 65 72 61 6e 64 2e 0a 0a 3c 6c  her operand...<l
4140: 69 3e 3c 70 3e 5e 49 66 20 6f 6e 65 20 6f 70 65  i><p>^If one ope
4150: 72 61 6e 64 20 68 61 73 20 54 45 58 54 20 61 66  rand has TEXT af
4160: 66 69 6e 69 74 79 20 61 6e 64 20 74 68 65 20 6f  finity and the o
4170: 74 68 65 72 20 68 61 73 20 6e 6f 20 61 66 66 69  ther has no affi
4180: 6e 69 74 79 2c 0a 74 68 65 6e 20 54 45 58 54 20  nity,.then TEXT 
4190: 61 66 66 69 6e 69 74 79 20 69 73 20 61 70 70 6c  affinity is appl
41a0: 69 65 64 20 74 6f 20 74 68 65 20 6f 74 68 65 72  ied to the other
41b0: 20 6f 70 65 72 61 6e 64 2e 0a 0a 3c 6c 69 3e 3c   operand...<li><
41c0: 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 6e 6f  p>^Otherwise, no
41d0: 20 61 66 66 69 6e 69 74 79 20 69 73 20 61 70 70   affinity is app
41e0: 6c 69 65 64 20 61 6e 64 20 62 6f 74 68 20 6f 70  lied and both op
41f0: 65 72 61 6e 64 73 20 61 72 65 20 63 6f 6d 70 61  erands are compa
4200: 72 65 64 0a 61 73 20 69 73 2e 3c 2f 70 3e 0a 3c  red.as is.</p>.<
4210: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 65  /ul>..<p>^(The e
4220: 78 70 72 65 73 73 69 6f 6e 20 22 61 20 42 45 54  xpression "a BET
4230: 57 45 45 4e 20 62 20 41 4e 44 20 63 22 20 69 73  WEEN b AND c" is
4240: 20 74 72 65 61 74 65 64 20 61 73 20 74 77 6f 20   treated as two 
4250: 73 65 70 61 72 61 74 65 0a 62 69 6e 61 72 79 20  separate.binary 
4260: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 22 61 20 26  comparisons "a &
4270: 67 74 3b 3d 20 62 20 41 4e 44 20 61 20 26 6c 74  gt;= b AND a &lt
4280: 3b 3d 20 63 22 2c 20 65 76 65 6e 20 69 66 20 74  ;= c", even if t
4290: 68 61 74 20 6d 65 61 6e 73 0a 64 69 66 66 65 72  hat means.differ
42a0: 65 6e 74 20 61 66 66 69 6e 69 74 69 65 73 20 61  ent affinities a
42b0: 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 27 61  re applied to 'a
42c0: 27 20 69 6e 20 65 61 63 68 20 6f 66 20 74 68 65  ' in each of the
42d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 29 5e 0a   comparisons.)^.
42e0: 5e 28 44 61 74 61 74 79 70 65 20 63 6f 6e 76 65  ^(Datatype conve
42f0: 72 73 69 6f 6e 73 20 69 6e 20 63 6f 6d 70 61 72  rsions in compar
4300: 69 73 6f 6e 73 20 6f 66 20 74 68 65 0a 66 6f 72  isons of the.for
4310: 6d 20 22 78 20 49 4e 20 28 53 45 4c 45 43 54 20  m "x IN (SELECT 
4320: 79 20 2e 2e 2e 29 22 20 61 72 65 20 68 61 6e 64  y ...)" are hand
4330: 6c 65 64 20 69 73 20 69 66 0a 74 68 65 20 63 6f  led is if.the co
4340: 6d 70 61 72 69 73 6f 6e 20 77 65 72 65 20 72 65  mparison were re
4350: 61 6c 6c 79 20 22 78 3d 79 22 2e 29 5e 0a 5e 28  ally "x=y".)^.^(
4360: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22  The expression "
4370: 61 20 49 4e 20 28 78 2c 20 79 2c 20 7a 2c 20 2e  a IN (x, y, z, .
4380: 2e 2e 29 22 20 69 73 20 65 71 75 69 76 61 6c 65  ..)" is equivale
4390: 6e 74 20 74 6f 20 22 61 20 3d 20 2b 78 20 4f 52  nt to "a = +x OR
43a0: 0a 61 20 3d 20 2b 79 20 4f 52 20 61 20 3d 20 2b  .a = +y OR a = +
43b0: 7a 20 4f 52 20 2e 2e 2e 22 2e 29 5e 20 20 0a 5e  z OR ...".)^  .^
43c0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
43d0: 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 74 68  the values to th
43e0: 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 49  e right of the I
43f0: 4e 20 6f 70 65 72 61 74 6f 72 20 28 74 68 65 20  N operator (the 
4400: 22 78 22 2c 20 22 79 22 2c 0a 61 6e 64 20 22 7a  "x", "y",.and "z
4410: 22 20 76 61 6c 75 65 73 20 69 6e 20 74 68 69 73  " values in this
4420: 20 65 78 61 6d 70 6c 65 29 20 61 72 65 20 63 6f   example) are co
4430: 6e 73 69 64 65 72 65 64 20 74 6f 20 68 61 76 65  nsidered to have
4440: 20 6e 6f 20 61 66 66 69 6e 69 74 79 2c 20 0a 65   no affinity, .e
4450: 76 65 6e 20 69 66 20 74 68 65 79 20 68 61 70 70  ven if they happ
4460: 65 6e 20 74 6f 20 62 65 20 63 6f 6c 75 6d 6e 20  en to be column 
4470: 76 61 6c 75 65 73 20 6f 72 20 43 41 53 54 20 65  values or CAST e
4480: 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 0a 3c 2f  xpressions.  .</
4490: 70 3e 0a 0a 3c 68 32 3e 43 6f 6d 70 61 72 69 73  p>..<h2>Comparis
44a0: 6f 6e 20 45 78 61 6d 70 6c 65 3c 2f 68 32 3e 0a  on Example</h2>.
44b0: 0a 5e 28 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .^(<blockquote>.
44c0: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
44d0: 4c 45 20 74 31 28 0a 20 20 20 20 61 20 54 45 58  LE t1(.    a TEX
44e0: 54 2c 20 20 20 20 20 20 2d 2d 20 74 65 78 74 20  T,      -- text 
44f0: 61 66 66 69 6e 69 74 79 0a 20 20 20 20 62 20 4e  affinity.    b N
4500: 55 4d 45 52 49 43 2c 20 20 20 2d 2d 20 6e 75 6d  UMERIC,   -- num
4510: 65 72 69 63 20 61 66 66 69 6e 69 74 79 0a 20 20  eric affinity.  
4520: 20 20 63 20 42 4c 4f 42 2c 20 20 20 20 20 20 2d    c BLOB,      -
4530: 2d 20 6e 6f 20 61 66 66 69 6e 69 74 79 0a 20 20  - no affinity.  
4540: 20 20 64 20 20 20 20 20 20 20 20 20 20 20 20 2d    d            -
4550: 2d 20 6e 6f 20 61 66 66 69 6e 69 74 79 0a 29 3b  - no affinity.);
4560: 0a 0a 2d 2d 20 56 61 6c 75 65 73 20 77 69 6c 6c  ..-- Values will
4570: 20 62 65 20 73 74 6f 72 65 64 20 61 73 20 54 45   be stored as TE
4580: 58 54 2c 20 49 4e 54 45 47 45 52 2c 20 54 45 58  XT, INTEGER, TEX
4590: 54 2c 20 61 6e 64 20 49 4e 54 45 47 45 52 20 72  T, and INTEGER r
45a0: 65 73 70 65 63 74 69 76 65 6c 79 0a 49 4e 53 45  espectively.INSE
45b0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
45c0: 53 28 27 35 30 30 27 2c 20 27 35 30 30 27 2c 20  S('500', '500', 
45d0: 27 35 30 30 27 2c 20 35 30 30 29 3b 0a 53 45 4c  '500', 500);.SEL
45e0: 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20 74  ECT typeof(a), t
45f0: 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65 6f 66  ypeof(b), typeof
4600: 28 63 29 2c 20 74 79 70 65 6f 66 28 64 29 20 46  (c), typeof(d) F
4610: 52 4f 4d 20 74 31 3b 0a 74 65 78 74 7c 69 6e 74  ROM t1;.text|int
4620: 65 67 65 72 7c 74 65 78 74 7c 69 6e 74 65 67 65  eger|text|intege
4630: 72 0a 0a 2d 2d 20 42 65 63 61 75 73 65 20 63 6f  r..-- Because co
4640: 6c 75 6d 6e 20 22 61 22 20 68 61 73 20 74 65 78  lumn "a" has tex
4650: 74 20 61 66 66 69 6e 69 74 79 2c 20 6e 75 6d 65  t affinity, nume
4660: 72 69 63 20 76 61 6c 75 65 73 20 6f 6e 20 74 68  ric values on th
4670: 65 0a 2d 2d 20 72 69 67 68 74 2d 68 61 6e 64 20  e.-- right-hand 
4680: 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
4690: 61 72 69 73 6f 6e 73 20 61 72 65 20 63 6f 6e 76  arisons are conv
46a0: 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 62 65  erted to text be
46b0: 66 6f 72 65 0a 2d 2d 20 74 68 65 20 63 6f 6d 70  fore.-- the comp
46c0: 61 72 69 73 6f 6e 20 6f 63 63 75 72 73 2e 0a 53  arison occurs..S
46d0: 45 4c 45 43 54 20 61 20 26 6c 74 3b 20 34 30 2c  ELECT a &lt; 40,
46e0: 20 20 20 61 20 26 6c 74 3b 20 36 30 2c 20 20 20     a &lt; 60,   
46f0: 61 20 26 6c 74 3b 20 36 30 30 20 46 52 4f 4d 20  a &lt; 600 FROM 
4700: 74 31 3b 0a 30 7c 31 7c 31 0a 0a 2d 2d 20 54 65  t1;.0|1|1..-- Te
4710: 78 74 20 61 66 66 69 6e 69 74 79 20 69 73 20 61  xt affinity is a
4720: 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 72 69  pplied to the ri
4730: 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
4740: 73 20 62 75 74 20 73 69 6e 63 65 0a 2d 2d 20 74  s but since.-- t
4750: 68 65 79 20 61 72 65 20 61 6c 72 65 61 64 79 20  hey are already 
4760: 54 45 58 54 20 74 68 69 73 20 69 73 20 61 20 6e  TEXT this is a n
4770: 6f 2d 6f 70 3b 20 6e 6f 20 63 6f 6e 76 65 72 73  o-op; no convers
4780: 69 6f 6e 73 20 6f 63 63 75 72 2e 0a 53 45 4c 45  ions occur..SELE
4790: 43 54 20 61 20 26 6c 74 3b 20 27 34 30 27 2c 20  CT a &lt; '40', 
47a0: 61 20 26 6c 74 3b 20 27 36 30 27 2c 20 61 20 26  a &lt; '60', a &
47b0: 6c 74 3b 20 27 36 30 30 27 20 46 52 4f 4d 20 74  lt; '600' FROM t
47c0: 31 3b 0a 30 7c 31 7c 31 0a 0a 2d 2d 20 43 6f 6c  1;.0|1|1..-- Col
47d0: 75 6d 6e 20 22 62 22 20 68 61 73 20 6e 75 6d 65  umn "b" has nume
47e0: 72 69 63 20 61 66 66 69 6e 69 74 79 20 61 6e 64  ric affinity and
47f0: 20 73 6f 20 6e 75 6d 65 72 69 63 20 61 66 66 69   so numeric affi
4800: 6e 69 74 79 20 69 73 20 61 70 70 6c 69 65 64 0a  nity is applied.
4810: 2d 2d 20 74 6f 20 74 68 65 20 6f 70 65 72 61 6e  -- to the operan
4820: 64 73 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e  ds on the right.
4830: 20 20 53 69 6e 63 65 20 74 68 65 20 6f 70 65 72    Since the oper
4840: 61 6e 64 73 20 61 72 65 20 61 6c 72 65 61 64 79  ands are already
4850: 20 6e 75 6d 65 72 69 63 2c 0a 2d 2d 20 74 68 65   numeric,.-- the
4860: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20   application of 
4870: 61 66 66 69 6e 69 74 79 20 69 73 20 61 20 6e 6f  affinity is a no
4880: 2d 6f 70 3b 20 6e 6f 20 63 6f 6e 76 65 72 73 69  -op; no conversi
4890: 6f 6e 73 20 6f 63 63 75 72 2e 20 20 41 6c 6c 0a  ons occur.  All.
48a0: 2d 2d 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  -- values are co
48b0: 6d 70 61 72 65 64 20 6e 75 6d 65 72 69 63 61 6c  mpared numerical
48c0: 6c 79 2e 0a 53 45 4c 45 43 54 20 62 20 26 6c 74  ly..SELECT b &lt
48d0: 3b 20 34 30 2c 20 20 20 62 20 26 6c 74 3b 20 36  ; 40,   b &lt; 6
48e0: 30 2c 20 20 20 62 20 26 6c 74 3b 20 36 30 30 20  0,   b &lt; 600 
48f0: 46 52 4f 4d 20 74 31 3b 0a 30 7c 30 7c 31 0a 0a  FROM t1;.0|0|1..
4900: 2d 2d 20 4e 75 6d 65 72 69 63 20 61 66 66 69 6e  -- Numeric affin
4910: 69 74 79 20 69 73 20 61 70 70 6c 69 65 64 20 74  ity is applied t
4920: 6f 20 6f 70 65 72 61 6e 64 73 20 6f 6e 20 74 68  o operands on th
4930: 65 20 72 69 67 68 74 2c 20 63 6f 6e 76 65 72 74  e right, convert
4940: 69 6e 67 20 74 68 65 6d 0a 2d 2d 20 66 72 6f 6d  ing them.-- from
4950: 20 74 65 78 74 20 74 6f 20 69 6e 74 65 67 65 72   text to integer
4960: 73 2e 20 20 54 68 65 6e 20 61 20 6e 75 6d 65 72  s.  Then a numer
4970: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 63  ic comparison oc
4980: 63 75 72 73 2e 0a 53 45 4c 45 43 54 20 62 20 26  curs..SELECT b &
4990: 6c 74 3b 20 27 34 30 27 2c 20 62 20 26 6c 74 3b  lt; '40', b &lt;
49a0: 20 27 36 30 27 2c 20 62 20 26 6c 74 3b 20 27 36   '60', b &lt; '6
49b0: 30 30 27 20 46 52 4f 4d 20 74 31 3b 0a 30 7c 30  00' FROM t1;.0|0
49c0: 7c 31 0a 0a 2d 2d 20 4e 6f 20 61 66 66 69 6e 69  |1..-- No affini
49d0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f  ty conversions o
49e0: 63 63 75 72 2e 20 20 52 69 67 68 74 2d 68 61 6e  ccur.  Right-han
49f0: 64 20 73 69 64 65 20 76 61 6c 75 65 73 20 61 6c  d side values al
4a00: 6c 20 68 61 76 65 0a 2d 2d 20 73 74 6f 72 61 67  l have.-- storag
4a10: 65 20 63 6c 61 73 73 20 49 4e 54 45 47 45 52 20  e class INTEGER 
4a20: 77 68 69 63 68 20 61 72 65 20 61 6c 77 61 79 73  which are always
4a30: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 54   less than the T
4a40: 45 58 54 20 76 61 6c 75 65 73 0a 2d 2d 20 6f 6e  EXT values.-- on
4a50: 20 74 68 65 20 6c 65 66 74 2e 0a 53 45 4c 45 43   the left..SELEC
4a60: 54 20 63 20 26 6c 74 3b 20 34 30 2c 20 20 20 63  T c &lt; 40,   c
4a70: 20 26 6c 74 3b 20 36 30 2c 20 20 20 63 20 26 6c   &lt; 60,   c &l
4a80: 74 3b 20 36 30 30 20 46 52 4f 4d 20 74 31 3b 0a  t; 600 FROM t1;.
4a90: 30 7c 30 7c 30 0a 0a 2d 2d 20 4e 6f 20 61 66 66  0|0|0..-- No aff
4aa0: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
4ab0: 73 20 6f 63 63 75 72 2e 20 20 56 61 6c 75 65 73  s occur.  Values
4ac0: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 61 73   are compared as
4ad0: 20 54 45 58 54 2e 0a 53 45 4c 45 43 54 20 63 20   TEXT..SELECT c 
4ae0: 26 6c 74 3b 20 27 34 30 27 2c 20 63 20 26 6c 74  &lt; '40', c &lt
4af0: 3b 20 27 36 30 27 2c 20 63 20 26 6c 74 3b 20 27  ; '60', c &lt; '
4b00: 36 30 30 27 20 46 52 4f 4d 20 74 31 3b 0a 30 7c  600' FROM t1;.0|
4b10: 31 7c 31 0a 0a 2d 2d 20 4e 6f 20 61 66 66 69 6e  1|1..-- No affin
4b20: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
4b30: 6f 63 63 75 72 2e 20 20 52 69 67 68 74 2d 68 61  occur.  Right-ha
4b40: 6e 64 20 73 69 64 65 20 76 61 6c 75 65 73 20 61  nd side values a
4b50: 6c 6c 20 68 61 76 65 0a 2d 2d 20 73 74 6f 72 61  ll have.-- stora
4b60: 67 65 20 63 6c 61 73 73 20 49 4e 54 45 47 45 52  ge class INTEGER
4b70: 20 77 68 69 63 68 20 63 6f 6d 70 61 72 65 20 6e   which compare n
4b80: 75 6d 65 72 69 63 61 6c 6c 79 20 77 69 74 68 20  umerically with 
4b90: 74 68 65 20 49 4e 54 45 47 45 52 0a 2d 2d 20 76  the INTEGER.-- v
4ba0: 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 6c 65 66  alues on the lef
4bb0: 74 2e 0a 53 45 4c 45 43 54 20 64 20 26 6c 74 3b  t..SELECT d &lt;
4bc0: 20 34 30 2c 20 20 20 64 20 26 6c 74 3b 20 36 30   40,   d &lt; 60
4bd0: 2c 20 20 20 64 20 26 6c 74 3b 20 36 30 30 20 46  ,   d &lt; 600 F
4be0: 52 4f 4d 20 74 31 3b 0a 30 7c 30 7c 31 0a 0a 2d  ROM t1;.0|0|1..-
4bf0: 2d 20 4e 6f 20 61 66 66 69 6e 69 74 79 20 63 6f  - No affinity co
4c00: 6e 76 65 72 73 69 6f 6e 73 20 6f 63 63 75 72 2e  nversions occur.
4c10: 20 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 73    INTEGER values
4c20: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61 72 65   on the left are
4c30: 0a 2d 2d 20 61 6c 77 61 79 73 20 6c 65 73 73 20  .-- always less 
4c40: 74 68 61 6e 20 54 45 58 54 20 76 61 6c 75 65 73  than TEXT values
4c50: 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 53   on the right..S
4c60: 45 4c 45 43 54 20 64 20 26 6c 74 3b 20 27 34 30  ELECT d &lt; '40
4c70: 27 2c 20 64 20 26 6c 74 3b 20 27 36 30 27 2c 20  ', d &lt; '60', 
4c80: 64 20 26 6c 74 3b 20 27 36 30 30 27 20 46 52 4f  d &lt; '600' FRO
4c90: 4d 20 74 31 3b 0a 31 7c 31 7c 31 0a 3c 2f 70 72  M t1;.1|1|1.</pr
4ca0: 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
4cb0: 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 6f 66 20 74  )^..<p>^All of t
4cc0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 74 68 65  he result in the
4cd0: 20 65 78 61 6d 70 6c 65 20 61 72 65 20 74 68 65   example are the
4ce0: 20 73 61 6d 65 20 69 66 20 74 68 65 20 63 6f 6d   same if the com
4cf0: 70 61 72 69 73 6f 6e 73 20 61 72 65 0a 63 6f 6d  parisons are.com
4d00: 6d 75 74 65 64 20 2d 20 69 66 20 65 78 70 72 65  muted - if expre
4d10: 73 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 66 6f  ssions of the fo
4d20: 72 6d 20 22 61 26 6c 74 3b 34 30 22 20 61 72 65  rm "a&lt;40" are
4d30: 20 72 65 77 72 69 74 74 65 6e 0a 61 73 20 22 34   rewritten.as "4
4d40: 30 26 67 74 3b 61 22 2e 0a 0a 3c 68 31 3e 4f 70  0&gt;a"...<h1>Op
4d50: 65 72 61 74 6f 72 73 3c 2f 68 31 3e 0a 0a 3c 70  erators</h1>..<p
4d60: 3e 5e 28 4d 61 74 68 65 6d 61 74 69 63 61 6c 20  >^(Mathematical 
4d70: 6f 70 65 72 61 74 6f 72 73 20 28 2b 2c 20 2d 2c  operators (+, -,
4d80: 20 2a 2c 20 2f 2c 20 25 2c 20 26 6c 74 3b 26 6c   *, /, %, &lt;&l
4d90: 74 3b 2c 20 26 67 74 3b 26 67 74 3b 2c 0a 26 61  t;, &gt;&gt;,.&a
4da0: 6d 70 3b 2c 20 61 6e 64 20 7c 29 20 69 6e 74 65  mp;, and |) inte
4db0: 72 70 72 65 74 20 62 6f 74 68 20 6f 70 65 72 61  rpret both opera
4dc0: 6e 64 73 20 61 73 20 69 66 20 74 68 65 79 20 77  nds as if they w
4dd0: 65 72 65 20 6e 75 6d 62 65 72 73 2e 0a 53 54 52  ere numbers..STR
4de0: 49 4e 47 20 6f 72 20 42 4c 4f 42 20 6f 70 65 72  ING or BLOB oper
4df0: 61 6e 64 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  ands automatical
4e00: 6c 79 20 63 6f 6e 76 65 72 74 20 69 6e 74 6f 20  ly convert into 
4e10: 52 45 41 4c 20 6f 72 20 49 4e 54 45 47 45 52 20  REAL or INTEGER 
4e20: 76 61 6c 75 65 73 2e 29 5e 0a 5e 28 49 66 20 74  values.)^.^(If t
4e30: 68 65 20 53 54 52 49 4e 47 20 6f 72 20 42 4c 4f  he STRING or BLO
4e40: 42 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 72  B looks like a r
4e50: 65 61 6c 20 6e 75 6d 62 65 72 20 28 69 66 20 69  eal number (if i
4e60: 74 20 68 61 73 20 61 20 64 65 63 69 6d 61 6c 20  t has a decimal 
4e70: 70 6f 69 6e 74 0a 6f 72 20 61 6e 20 65 78 70 6f  point.or an expo
4e80: 6e 65 6e 74 29 20 6f 72 20 69 66 20 74 68 65 20  nent) or if the 
4e90: 76 61 6c 75 65 20 69 73 20 6f 75 74 73 69 64 65  value is outside
4ea0: 20 74 68 65 20 72 61 6e 67 65 20 74 68 61 74 20   the range that 
4eb0: 63 61 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74  can be represent
4ec0: 65 64 0a 61 73 20 61 20 36 34 2d 62 69 74 20 73  ed.as a 64-bit s
4ed0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 74  igned integer, t
4ee0: 68 65 6e 20 69 74 20 63 6f 6e 76 65 72 74 73 20  hen it converts 
4ef0: 74 6f 20 52 45 41 4c 2e 20 20 4f 74 68 65 72 77  to REAL.  Otherw
4f00: 69 73 65 20 74 68 65 20 6f 70 65 72 61 6e 64 0a  ise the operand.
4f10: 63 6f 6e 76 65 72 74 73 20 74 6f 20 49 4e 54 45  converts to INTE
4f20: 47 45 52 2e 29 5e 0a 5e 28 54 68 65 20 69 6d 70  GER.)^.^(The imp
4f30: 6c 69 65 64 20 74 79 70 65 20 63 6f 6e 76 65 72  lied type conver
4f40: 73 69 6f 6e 20 6f 66 20 6d 61 74 68 65 6d 61 74  sion of mathemat
4f50: 69 63 61 6c 20 6f 70 65 72 61 6e 64 73 20 69 73  ical operands is
4f60: 20 73 6c 69 67 68 74 6c 79 20 64 69 66 66 65 72   slightly differ
4f70: 65 6e 74 0a 66 72 6f 6d 20 5b 43 41 53 54 7c 43  ent.from [CAST|C
4f80: 41 53 54 20 74 6f 20 4e 55 4d 45 52 49 43 5d 20  AST to NUMERIC] 
4f90: 69 6e 20 74 68 61 74 20 73 74 72 69 6e 67 20 61  in that string a
4fa0: 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74  nd BLOB values t
4fb0: 68 61 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 72 65  hat.look like re
4fc0: 61 6c 20 6e 75 6d 62 65 72 73 20 62 75 74 20 68  al numbers but h
4fd0: 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61  ave no fractiona
4fe0: 6c 20 70 61 72 74 20 61 72 65 20 6b 65 70 74 20  l part are kept 
4ff0: 61 73 20 52 45 41 4c 0a 69 6e 73 74 65 61 64 20  as REAL.instead 
5000: 6f 66 20 62 65 69 6e 67 20 63 6f 6e 76 65 72 74  of being convert
5010: 65 64 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20  ed into INTEGER 
5020: 61 73 20 74 68 65 79 20 77 6f 75 6c 64 20 62 65  as they would be
5030: 20 66 6f 72 20 5b 43 41 53 54 7c 43 41 53 54 20   for [CAST|CAST 
5040: 74 6f 20 4e 55 4d 45 52 49 43 5d 2e 29 5e 0a 5e  to NUMERIC].)^.^
5050: 54 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 66  The conversion f
5060: 72 6f 6d 20 53 54 52 49 4e 47 20 6f 72 20 42 4c  rom STRING or BL
5070: 4f 42 20 69 6e 74 6f 20 52 45 41 4c 20 6f 72 20  OB into REAL or 
5080: 49 4e 54 45 47 45 52 20 69 73 20 70 65 72 66 6f  INTEGER is perfo
5090: 72 6d 65 64 0a 65 76 65 6e 20 69 66 20 69 74 20  rmed.even if it 
50a0: 69 73 20 6c 6f 73 73 79 20 61 6e 64 20 69 72 72  is lossy and irr
50b0: 65 76 65 72 73 69 62 6c 65 2e 0a 5e 28 53 6f 6d  eversible..^(Som
50c0: 65 20 6d 61 74 68 65 6d 61 74 69 63 61 6c 20 6f  e mathematical o
50d0: 70 65 72 61 74 6f 72 73 20 28 25 2c 20 26 6c 74  perators (%, &lt
50e0: 3b 26 6c 74 3b 2c 20 26 67 74 3b 26 67 74 3b 2c  ;&lt;, &gt;&gt;,
50f0: 20 26 61 6d 70 3b 2c 20 61 6e 64 20 7c 29 20 65   &amp;, and |) e
5100: 78 70 65 63 74 0a 49 4e 54 45 47 45 52 20 6f 70  xpect.INTEGER op
5110: 65 72 61 6e 64 73 2e 20 20 46 6f 72 20 74 68 6f  erands.  For tho
5120: 73 65 20 6f 70 65 72 61 74 6f 72 73 2c 20 52 45  se operators, RE
5130: 41 4c 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  AL operands are 
5140: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 49  converted into I
5150: 4e 54 45 47 45 52 0a 69 6e 20 74 68 65 20 73 61  NTEGER.in the sa
5160: 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53  me way as a [CAS
5170: 54 7c 43 41 53 54 20 74 6f 20 49 4e 54 45 47 45  T|CAST to INTEGE
5180: 52 5d 2e 29 5e 0a 5e 54 68 65 20 26 6c 74 3b 26  R].)^.^The &lt;&
5190: 6c 74 3b 2c 20 26 67 74 3b 26 67 74 3b 2c 20 26  lt;, &gt;&gt;, &
51a0: 61 6d 70 3b 2c 20 61 6e 64 20 7c 20 6f 70 65 72  amp;, and | oper
51b0: 61 74 6f 72 73 20 61 6c 77 61 79 73 20 72 65 74  ators always ret
51c0: 75 72 6e 20 61 6e 20 49 4e 54 45 47 45 52 20 28  urn an INTEGER (
51d0: 6f 72 20 4e 55 4c 4c 29 0a 72 65 73 75 6c 74 2c  or NULL).result,
51e0: 20 62 75 74 20 74 68 65 20 25 20 6f 70 65 72 61   but the % opera
51f0: 74 6f 72 20 72 65 74 75 72 6e 73 20 65 69 74 68  tor returns eith
5200: 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  er INTEGER or RE
5210: 41 4c 20 28 6f 72 20 4e 55 4c 4c 29 0a 64 65 70  AL (or NULL).dep
5220: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 74 79  ending on the ty
5230: 70 65 20 6f 66 20 69 74 73 20 6f 70 65 72 61 6e  pe of its operan
5240: 64 73 2e 0a 5e 41 20 4e 55 4c 4c 20 6f 70 65 72  ds..^A NULL oper
5250: 61 6e 64 20 6f 6e 20 61 20 6d 61 74 68 65 6d 61  and on a mathema
5260: 74 69 63 61 6c 20 6f 70 65 72 61 74 6f 72 20 79  tical operator y
5270: 69 65 6c 64 73 20 61 20 4e 55 4c 4c 20 72 65 73  ields a NULL res
5280: 75 6c 74 2e 0a 5e 28 41 6e 20 6f 70 65 72 61 6e  ult..^(An operan
5290: 64 20 6f 6e 20 61 20 6d 61 74 68 65 6d 61 74 69  d on a mathemati
52a0: 63 61 6c 20 6f 70 65 72 61 74 6f 72 20 74 68 61  cal operator tha
52b0: 74 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  t does not look 
52c0: 69 6e 20 61 6e 79 20 77 61 79 0a 6e 75 6d 65 72  in any way.numer
52d0: 69 63 20 61 6e 64 20 69 73 20 6e 6f 74 20 4e 55  ic and is not NU
52e0: 4c 4c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  LL is converted 
52f0: 74 6f 20 30 20 6f 72 20 30 2e 30 2e 29 5e 0a 5e  to 0 or 0.0.)^.^
5300: 44 69 76 69 73 69 6f 6e 20 62 79 20 7a 65 72 6f  Division by zero
5310: 20 67 69 76 65 73 20 61 20 72 65 73 75 6c 74 20   gives a result 
5320: 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 70 3e 0a 0a 3c  of NULL..</p>..<
5330: 68 31 3e 53 6f 72 74 69 6e 67 2c 20 47 72 6f 75  h1>Sorting, Grou
5340: 70 69 6e 67 20 61 6e 64 20 43 6f 6d 70 6f 75 6e  ping and Compoun
5350: 64 20 53 45 4c 45 43 54 73 3c 2f 68 31 3e 0a 0a  d SELECTs</h1>..
5360: 3c 70 3e 5e 57 68 65 6e 20 71 75 65 72 79 20 72  <p>^When query r
5370: 65 73 75 6c 74 73 20 61 72 65 20 73 6f 72 74 65  esults are sorte
5380: 64 20 62 79 20 61 6e 20 4f 52 44 45 52 20 42 59  d by an ORDER BY
5390: 20 63 6c 61 75 73 65 2c 20 76 61 6c 75 65 73 20   clause, values 
53a0: 77 69 74 68 20 73 74 6f 72 61 67 65 0a 63 6c 61  with storage.cla
53b0: 73 73 20 4e 55 4c 4c 20 63 6f 6d 65 20 66 69 72  ss NULL come fir
53c0: 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  st, followed by 
53d0: 49 4e 54 45 47 45 52 20 61 6e 64 20 52 45 41 4c  INTEGER and REAL
53e0: 20 76 61 6c 75 65 73 0a 69 6e 74 65 72 73 70 65   values.interspe
53f0: 72 73 65 64 20 69 6e 20 6e 75 6d 65 72 69 63 20  rsed in numeric 
5400: 6f 72 64 65 72 2c 20 66 6f 6c 6c 6f 77 65 64 20  order, followed 
5410: 62 79 20 54 45 58 54 20 76 61 6c 75 65 73 20 69  by TEXT values i
5420: 6e 20 63 6f 6c 6c 61 74 69 6e 67 0a 73 65 71 75  n collating.sequ
5430: 65 6e 63 65 20 6f 72 64 65 72 2c 20 61 6e 64 20  ence order, and 
5440: 66 69 6e 61 6c 6c 79 20 42 4c 4f 42 20 76 61 6c  finally BLOB val
5450: 75 65 73 20 69 6e 20 6d 65 6d 63 6d 70 28 29 20  ues in memcmp() 
5460: 6f 72 64 65 72 2e 20 20 5e 4e 6f 20 73 74 6f 72  order.  ^No stor
5470: 61 67 65 0a 63 6c 61 73 73 20 63 6f 6e 76 65 72  age.class conver
5480: 73 69 6f 6e 73 20 6f 63 63 75 72 20 62 65 66 6f  sions occur befo
5490: 72 65 20 74 68 65 20 73 6f 72 74 2e 3c 2f 70 3e  re the sort.</p>
54a0: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 67 72 6f 75 70  ..<p>^When group
54b0: 69 6e 67 20 76 61 6c 75 65 73 20 77 69 74 68 20  ing values with 
54c0: 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
54d0: 75 73 65 20 76 61 6c 75 65 73 20 77 69 74 68 0a  use values with.
54e0: 64 69 66 66 65 72 65 6e 74 20 73 74 6f 72 61 67  different storag
54f0: 65 20 63 6c 61 73 73 65 73 20 61 72 65 20 63 6f  e classes are co
5500: 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e 63  nsidered distinc
5510: 74 2c 20 65 78 63 65 70 74 20 66 6f 72 20 49 4e  t, except for IN
5520: 54 45 47 45 52 0a 61 6e 64 20 52 45 41 4c 20 76  TEGER.and REAL v
5530: 61 6c 75 65 73 20 77 68 69 63 68 20 61 72 65 20  alues which are 
5540: 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c  considered equal
5550: 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 75 6d   if they are num
5560: 65 72 69 63 61 6c 6c 79 0a 65 71 75 61 6c 2e 20  erically.equal. 
5570: 5e 4e 6f 20 61 66 66 69 6e 69 74 69 65 73 20 61  ^No affinities a
5580: 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 61 6e  re applied to an
5590: 79 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20  y values as the 
55a0: 72 65 73 75 6c 74 20 6f 66 20 61 0a 47 52 4f 55  result of a.GROU
55b0: 50 20 62 79 20 63 6c 61 75 73 65 2e 3c 2f 70 3e  P by clause.</p>
55c0: 0a 0a 3c 70 3e 5e 54 68 65 20 63 6f 6d 70 6f 75  ..<p>^The compou
55d0: 6e 64 20 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd SELECT operat
55e0: 6f 72 73 20 55 4e 49 4f 4e 2c 0a 49 4e 54 45 52  ors UNION,.INTER
55f0: 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
5600: 70 65 72 66 6f 72 6d 20 69 6d 70 6c 69 63 69 74  perform implicit
5610: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65 74   comparisons bet
5620: 77 65 65 6e 20 76 61 6c 75 65 73 2e 0a 5e 4e 6f  ween values..^No
5630: 20 61 66 66 69 6e 69 74 79 20 69 73 20 61 70 70   affinity is app
5640: 6c 69 65 64 20 74 6f 20 63 6f 6d 70 61 72 69 73  lied to comparis
5650: 6f 6e 20 6f 70 65 72 61 6e 64 73 20 66 6f 72 20  on operands for 
5660: 74 68 65 20 69 6d 70 6c 69 63 69 74 0a 63 6f 6d  the implicit.com
5670: 70 61 72 69 73 6f 6e 73 20 61 73 73 6f 63 69 61  parisons associa
5680: 74 65 64 20 77 69 74 68 20 55 4e 49 4f 4e 2c 20  ted with UNION, 
5690: 49 4e 54 45 52 53 45 43 54 2c 20 6f 72 20 45 58  INTERSECT, or EX
56a0: 43 45 50 54 20 2d 20 74 68 65 20 76 61 6c 75 65  CEPT - the value
56b0: 73 0a 61 72 65 20 63 6f 6d 70 61 72 65 64 20 61  s.are compared a
56c0: 73 20 69 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  s is.</p>..<tcl>
56d0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c  hd_fragment coll
56e0: 61 74 69 6f 6e 20 7b 2a 63 6f 6c 6c 61 74 69 6e  ation {*collatin
56f0: 67 20 73 65 71 75 65 6e 63 65 7d 20 7b 2a 63 6f  g sequence} {*co
5700: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
5710: 73 7d 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  s}\.            
5720: 20 20 20 20 20 7b 63 6f 6c 6c 61 74 69 6e 67 20       {collating 
5730: 66 75 6e 63 74 69 6f 6e 7d 20 2a 63 6f 6c 6c 61  function} *colla
5740: 74 69 6f 6e 20 2a 42 49 4e 41 52 59 20 2a 4e 4f  tion *BINARY *NO
5750: 43 41 53 45 20 2a 52 54 52 49 4d 20 5c 0a 20 20  CASE *RTRIM \.  
5760: 20 20 20 20 20 20 7b 42 49 4e 41 52 59 20 63 6f        {BINARY co
5770: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
5780: 7d 20 5c 0a 20 20 20 20 20 20 20 20 7b 4e 4f 43  } \.        {NOC
5790: 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ASE collating fu
57a0: 6e 63 74 69 6f 6e 7d 20 5c 0a 20 20 20 20 20 20  nction} \.      
57b0: 20 20 7b 52 54 52 49 4d 20 63 6f 6c 6c 61 74 69    {RTRIM collati
57c0: 6e 67 20 66 75 6e 63 74 69 6f 6e 7d 3c 2f 74 63  ng function}</tc
57d0: 6c 3e 0a 3c 68 31 3e 43 6f 6c 6c 61 74 69 6e 67  l>.<h1>Collating
57e0: 20 53 65 71 75 65 6e 63 65 73 3c 2f 68 31 3e 0a   Sequences</h1>.
57f0: 0a 3c 70 3e 5e 57 68 65 6e 20 53 51 4c 69 74 65  .<p>^When SQLite
5800: 20 63 6f 6d 70 61 72 65 73 20 74 77 6f 20 73 74   compares two st
5810: 72 69 6e 67 73 2c 20 69 74 20 75 73 65 73 20 61  rings, it uses a
5820: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
5830: 6e 63 65 20 6f 72 0a 63 6f 6c 6c 61 74 69 6e 67  nce or.collating
5840: 20 66 75 6e 63 74 69 6f 6e 20 28 74 77 6f 20 77   function (two w
5850: 6f 72 64 73 20 66 6f 72 20 74 68 65 20 73 61 6d  ords for the sam
5860: 65 20 74 68 69 6e 67 29 20 74 6f 20 64 65 74 65  e thing) to dete
5870: 72 6d 69 6e 65 20 77 68 69 63 68 0a 73 74 72 69  rmine which.stri
5880: 6e 67 20 69 73 20 67 72 65 61 74 65 72 20 6f 72  ng is greater or
5890: 20 69 66 20 74 68 65 20 74 77 6f 20 73 74 72 69   if the two stri
58a0: 6e 67 73 20 61 72 65 20 65 71 75 61 6c 2e 0a 5e  ngs are equal..^
58b0: 53 51 4c 69 74 65 20 68 61 73 20 74 68 72 65 65  SQLite has three
58c0: 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74   built-in collat
58d0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 20 20  ing functions:  
58e0: 42 49 4e 41 52 59 2c 20 4e 4f 43 41 53 45 2c 20  BINARY, NOCASE, 
58f0: 61 6e 64 20 0a 52 54 52 49 4d 2e 3c 2f 70 3e 0a  and .RTRIM.</p>.
5900: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 28 3c 62 3e 42  .<ul>.<li>^(<b>B
5910: 49 4e 41 52 59 3c 2f 62 3e 20 2d 20 43 6f 6d 70  INARY</b> - Comp
5920: 61 72 65 73 20 73 74 72 69 6e 67 20 64 61 74 61  ares string data
5930: 20 75 73 69 6e 67 20 6d 65 6d 63 6d 70 28 29 2c   using memcmp(),
5940: 20 72 65 67 61 72 64 6c 65 73 73 0a 20 20 20 20   regardless.    
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
5960: 66 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  f text encoding.
5970: 3c 2f 6c 69 3e 29 5e 0a 3c 6c 69 3e 5e 28 3c 62  </li>)^.<li>^(<b
5980: 3e 4e 4f 43 41 53 45 3c 2f 62 3e 20 2d 20 54 68  >NOCASE</b> - Th
5990: 65 20 73 61 6d 65 20 61 73 20 62 69 6e 61 72 79  e same as binary
59a0: 2c 20 65 78 63 65 70 74 20 74 68 65 20 32 36 20  , except the 26 
59b0: 75 70 70 65 72 20 63 61 73 65 0a 20 20 20 20 20  upper case.     
59c0: 63 68 61 72 61 63 74 65 72 73 20 6f 66 20 41 53  characters of AS
59d0: 43 49 49 20 61 72 65 20 66 6f 6c 64 65 64 20 74  CII are folded t
59e0: 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 20 63 61  o their lower ca
59f0: 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20 62  se equivalents b
5a00: 65 66 6f 72 65 0a 20 20 20 20 20 74 68 65 20 63  efore.     the c
5a10: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 70 65 72  omparison is per
5a20: 66 6f 72 6d 65 64 2e 29 5e 20 20 4e 6f 74 65 20  formed.)^  Note 
5a30: 74 68 61 74 20 6f 6e 6c 79 20 41 53 43 49 49 20  that only ASCII 
5a40: 63 68 61 72 61 63 74 65 72 73 0a 20 20 20 20 20  characters.     
5a50: 61 72 65 20 63 61 73 65 20 66 6f 6c 64 65 64 2e  are case folded.
5a60: 20 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f    SQLite does no
5a70: 74 20 61 74 74 65 6d 70 74 20 74 6f 20 64 6f 20  t attempt to do 
5a80: 66 75 6c 6c 0a 20 20 20 20 20 55 54 46 20 63 61  full.     UTF ca
5a90: 73 65 20 66 6f 6c 64 69 6e 67 20 64 75 65 20 74  se folding due t
5aa0: 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  o the size of th
5ab0: 65 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  e tables require
5ac0: 64 2e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 5e 28 3c  d.</li>..<li>^(<
5ad0: 62 3e 52 54 52 49 4d 3c 2f 62 3e 20 2d 20 54 68  b>RTRIM</b> - Th
5ae0: 65 20 73 61 6d 65 20 61 73 20 62 69 6e 61 72 79  e same as binary
5af0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 72  , except that tr
5b00: 61 69 6c 69 6e 67 20 73 70 61 63 65 0a 20 20 20  ailing space.   
5b10: 20 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65    characters are
5b20: 20 69 67 6e 6f 72 65 64 2e 29 5e 3c 2f 6c 69 3e   ignored.)^</li>
5b30: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 6e 20 61 70  .</ul>..<p>An ap
5b40: 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 72 65  plication can re
5b50: 67 69 73 74 65 72 20 61 64 64 69 74 69 6f 6e 61  gister additiona
5b60: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  l collating func
5b70: 74 69 6f 6e 73 20 75 73 69 6e 67 0a 74 68 65 20  tions using.the 
5b80: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
5b90: 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74  collation()] int
5ba0: 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 68 32  erface.</p>..<h2
5bb0: 3e 41 73 73 69 67 6e 69 6e 67 20 43 6f 6c 6c 61  >Assigning Colla
5bc0: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 73 20 66  ting Sequences f
5bd0: 72 6f 6d 20 53 51 4c 3c 2f 68 32 3e 0a 0a 3c 70  rom SQL</h2>..<p
5be0: 3e 0a 5e 45 76 65 72 79 20 63 6f 6c 75 6d 6e 20  >.^Every column 
5bf0: 6f 66 20 65 76 65 72 79 0a 74 61 62 6c 65 20 68  of every.table h
5c00: 61 73 20 61 6e 20 61 73 73 6f 63 69 61 74 65 64  as an associated
5c10: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
5c20: 69 6f 6e 2e 20 20 5e 49 66 20 6e 6f 20 63 6f 6c  ion.  ^If no col
5c30: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a  lating function.
5c40: 69 73 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65  is explicitly de
5c50: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 20  fined, then the 
5c60: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
5c70: 6f 6e 20 64 65 66 61 75 6c 74 73 20 74 6f 20 42  on defaults to B
5c80: 49 4e 41 52 59 2e 0a 5e 54 68 65 20 43 4f 4c 4c  INARY..^The COLL
5c90: 41 54 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ATE clause of th
5ca0: 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  e [column defini
5cb0: 74 69 6f 6e 5d 20 69 73 20 75 73 65 64 0a 74 6f  tion] is used.to
5cc0: 20 64 65 66 69 6e 65 20 61 6c 74 65 72 6e 61 74   define alternat
5cd0: 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ive collating fu
5ce0: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 61 20 63 6f  nctions for a co
5cf0: 6c 75 6d 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  lumn..</p>..<tcl
5d00: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c  >hd_fragment col
5d10: 72 75 6c 65 73 20 7b 68 6f 77 20 63 6f 6c 6c 61  rules {how colla
5d20: 74 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e  tion is determin
5d30: 65 64 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e  ed}</tcl>..<p>.^
5d40: 28 54 68 65 20 72 75 6c 65 73 20 66 6f 72 20 64  (The rules for d
5d50: 65 74 65 72 6d 69 6e 69 6e 67 20 77 68 69 63 68  etermining which
5d60: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
5d70: 69 6f 6e 20 74 6f 20 75 73 65 20 66 6f 72 20 61  ion to use for a
5d80: 0a 62 69 6e 61 72 79 20 63 6f 6d 70 61 72 69 73  .binary comparis
5d90: 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28 3d 2c 20  on operator (=, 
5da0: 26 6c 74 3b 2c 20 26 67 74 3b 2c 20 26 6c 74 3b  &lt;, &gt;, &lt;
5db0: 3d 2c 20 26 67 74 3b 3d 2c 20 21 3d 2c 20 49 53  =, &gt;=, !=, IS
5dc0: 2c 20 61 6e 64 0a 49 53 20 4e 4f 54 29 20 61 72  , and.IS NOT) ar
5dd0: 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 29 5e 0a  e as follows:)^.
5de0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  .<ol>.<li><p>^If
5df0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
5e00: 68 61 73 20 61 6e 20 65 78 70 6c 69 63 69 74 20  has an explicit 
5e10: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
5e20: 6f 6e 20 61 73 73 69 67 6e 6d 65 6e 74 0a 75 73  on assignment.us
5e30: 69 6e 67 20 74 68 65 20 70 6f 73 74 66 69 78 20  ing the postfix 
5e40: 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
5e50: 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70  r], then the exp
5e60: 6c 69 63 69 74 20 63 6f 6c 6c 61 74 69 6e 67 20  licit collating 
5e70: 66 75 6e 63 74 69 6f 6e 0a 69 73 20 75 73 65 64  function.is used
5e80: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 2c   for comparison,
5e90: 20 77 69 74 68 20 70 72 65 63 65 64 65 6e 63 65   with precedence
5ea0: 20 74 6f 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   to the collatin
5eb0: 67 20 66 75 6e 63 74 69 6f 6e 20 6f 66 20 74 68  g function of th
5ec0: 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e 64 2e 3c  e.left operand.<
5ed0: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
5ee0: 3e 5e 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  >^If either oper
5ef0: 61 6e 64 20 69 73 20 61 20 63 6f 6c 75 6d 6e 2c  and is a column,
5f00: 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
5f10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6f 66 0a  ing function of.
5f20: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69 73 20 75  that column is u
5f30: 73 65 64 20 77 69 74 68 20 70 72 65 63 65 64 65  sed with precede
5f40: 6e 63 65 20 74 6f 20 74 68 65 20 6c 65 66 74 20  nce to the left 
5f50: 6f 70 65 72 61 6e 64 2e 0a 5e 46 6f 72 20 74 68  operand..^For th
5f60: 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68  e purposes of th
5f70: 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65  e previous sente
5f80: 6e 63 65 2c 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  nce, a column na
5f90: 6d 65 0a 70 72 65 63 65 64 65 64 20 62 79 20 6f  me.preceded by o
5fa0: 6e 65 20 6f 72 20 6d 6f 72 65 20 75 6e 61 72 79  ne or more unary
5fb0: 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 73 20 61   "+" operators a
5fc0: 6e 64 2f 6f 72 20 43 41 53 54 20 6f 70 65 72 61  nd/or CAST opera
5fd0: 74 6f 72 73 0a 69 73 20 73 74 69 6c 6c 20 63 6f  tors.is still co
5fe0: 6e 73 69 64 65 72 65 64 20 61 20 63 6f 6c 75 6d  nsidered a colum
5ff0: 6e 20 6e 61 6d 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69  n name..</p></li
6000: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72  >..<li><p>^Other
6010: 77 69 73 65 2c 20 74 68 65 20 42 49 4e 41 52 59  wise, the BINARY
6020: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
6030: 69 6f 6e 20 69 73 20 75 73 65 64 20 66 6f 72 20  ion is used for 
6040: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 2f 70 3e  comparison..</p>
6050: 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
6060: 0a 5e 41 6e 20 6f 70 65 72 61 6e 64 20 6f 66 20  .^An operand of 
6070: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  a comparison is 
6080: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 68 61  considered to ha
6090: 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 0a 63  ve an explicit.c
60a0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
60b0: 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 28 72 75  n assignment (ru
60c0: 6c 65 20 31 20 61 62 6f 76 65 29 20 0a 69 66 20  le 1 above) .if 
60d0: 61 6e 79 20 73 75 62 65 78 70 72 65 73 73 69 6f  any subexpressio
60e0: 6e 20 6f 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n of the operand
60f0: 20 75 73 65 73 0a 74 68 65 20 70 6f 73 74 66 69   uses.the postfi
6100: 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  x [COLLATE opera
6110: 74 6f 72 5d 2e 20 20 5e 54 68 75 73 2c 20 69 66  tor].  ^Thus, if
6120: 20 61 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72   a [COLLATE oper
6130: 61 74 6f 72 5d 20 69 73 20 75 73 65 64 0a 61 6e  ator] is used.an
6140: 79 77 68 65 72 65 20 69 6e 20 61 20 63 6f 6d 70  ywhere in a comp
6150: 61 72 69 73 69 6f 6e 20 65 78 70 72 65 73 73 69  arision expressi
6160: 6f 6e 2c 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e  on, the collatin
6170: 67 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  g function defin
6180: 65 64 0a 62 79 20 74 68 61 74 20 6f 70 65 72 61  ed.by that opera
6190: 74 6f 72 20 69 73 20 75 73 65 64 20 66 6f 72 20  tor is used for 
61a0: 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
61b0: 6e 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  n regardless of 
61c0: 77 68 61 74 20 0a 74 61 62 6c 65 20 63 6f 6c 75  what .table colu
61d0: 6d 6e 73 20 6d 69 67 68 74 20 62 65 20 61 20 70  mns might be a p
61e0: 61 72 74 20 6f 66 20 74 68 61 74 20 65 78 70 72  art of that expr
61f0: 65 73 73 69 6f 6e 2e 20 20 5e 49 66 20 74 77 6f  ession.  ^If two
6200: 20 6f 72 20 6d 6f 72 65 0a 5b 43 4f 4c 4c 41 54   or more.[COLLAT
6210: 45 20 6f 70 65 72 61 74 6f 72 5d 20 73 75 62 65  E operator] sube
6220: 78 70 72 65 73 73 69 6f 6e 73 20 61 70 70 65 61  xpressions appea
6230: 72 20 61 6e 79 77 68 65 72 65 20 69 6e 20 61 20  r anywhere in a 
6240: 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 74 68 65 20  comparison, the 
6250: 0a 6c 65 66 74 20 6d 6f 73 74 20 65 78 70 6c 69  .left most expli
6260: 63 69 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  cit collating fu
6270: 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 72  nction is used r
6280: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f 77  egardless of how
6290: 20 64 65 65 70 6c 79 20 74 68 65 0a 43 4f 4c 4c   deeply the.COLL
62a0: 41 54 45 20 6f 70 65 72 61 74 6f 72 73 20 61 72  ATE operators ar
62b0: 65 20 6e 65 73 74 65 64 20 69 6e 20 74 68 65 20  e nested in the 
62c0: 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 72  expression and r
62d0: 65 67 61 72 64 6c 65 73 73 20 6f 66 0a 68 6f 77  egardless of.how
62e0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
62f0: 69 73 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64  is parenthesized
6300: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65  ..</p>..<p>.^The
6310: 20 65 78 70 72 65 73 73 69 6f 6e 20 22 78 20 42   expression "x B
6320: 45 54 57 45 45 4e 20 79 20 61 6e 64 20 7a 22 20  ETWEEN y and z" 
6330: 69 73 20 6c 6f 67 69 63 61 6c 6c 79 0a 65 71 75  is logically.equ
6340: 69 76 61 6c 65 6e 74 20 74 6f 20 74 77 6f 20 63  ivalent to two c
6350: 6f 6d 70 61 72 69 73 6f 6e 73 20 22 78 20 26 67  omparisons "x &g
6360: 74 3b 3d 20 79 20 41 4e 44 20 78 20 26 6c 74 3b  t;= y AND x &lt;
6370: 3d 20 7a 22 20 61 6e 64 20 77 6f 72 6b 73 20 77  = z" and works w
6380: 69 74 68 0a 72 65 73 70 65 63 74 20 74 6f 20 63  ith.respect to c
6390: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
63a0: 6e 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65  ns as if it were
63b0: 20 74 77 6f 20 73 65 70 61 72 61 74 65 20 63 6f   two separate co
63c0: 6d 70 61 72 69 73 6f 6e 73 2e 0a 5e 28 54 68 65  mparisons..^(The
63d0: 20 65 78 70 72 65 73 73 69 6f 6e 20 22 78 20 49   expression "x I
63e0: 4e 20 28 53 45 4c 45 43 54 20 79 20 2e 2e 2e 29  N (SELECT y ...)
63f0: 22 20 69 73 20 68 61 6e 64 6c 65 64 20 69 6e 20  " is handled in 
6400: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
6410: 74 68 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 22  the.expression "
6420: 78 20 3d 20 79 22 20 66 6f 72 20 74 68 65 20 70  x = y" for the p
6430: 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
6440: 6d 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 6c 61  mining the colla
6450: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 29 5e  ting sequence.)^
6460: 0a 5e 28 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67  .^(The collating
6470: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
6480: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  or expressions o
6490: 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 78 20 49  f the form ."x I
64a0: 4e 20 28 79 2c 20 7a 2c 20 2e 2e 2e 29 22 20 69  N (y, z, ...)" i
64b0: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  s the collating 
64c0: 73 65 71 75 65 6e 63 65 20 6f 66 20 78 2e 29 5e  sequence of x.)^
64d0: 0a 3c 2f 70 3e 20 20 0a 0a 3c 70 3e 0a 5e 54 65  .</p>  ..<p>.^Te
64e0: 72 6d 73 20 6f 66 20 74 68 65 20 4f 52 44 45 52  rms of the ORDER
64f0: 20 42 59 20 63 6c 61 75 73 65 20 74 68 61 74 20   BY clause that 
6500: 69 73 20 70 61 72 74 20 6f 66 20 61 20 5b 53 45  is part of a [SE
6510: 4c 45 43 54 5d 0a 73 74 61 74 65 6d 65 6e 74 20  LECT].statement 
6520: 6d 61 79 20 62 65 20 61 73 73 69 67 6e 65 64 20  may be assigned 
6530: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
6540: 65 6e 63 65 20 75 73 69 6e 67 20 74 68 65 20 0a  ence using the .
6550: 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
6560: 72 5d 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  r], in which cas
6570: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
6580: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
6590: 6f 6e 20 69 73 0a 75 73 65 64 20 66 6f 72 20 73  on is.used for s
65a0: 6f 72 74 69 6e 67 2e 0a 5e 4f 74 68 65 72 77 69  orting..^Otherwi
65b0: 73 65 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  se, if the expre
65c0: 73 73 69 6f 6e 20 73 6f 72 74 65 64 20 62 79 20  ssion sorted by 
65d0: 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
65e0: 73 65 20 69 73 0a 61 20 63 6f 6c 75 6d 6e 2c 20  se is.a column, 
65f0: 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  then the collati
6600: 6e 67 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ng sequence of t
6610: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  he column is use
6620: 64 20 74 6f 0a 64 65 74 65 72 6d 69 6e 65 20 73  d to.determine s
6630: 6f 72 74 20 6f 72 64 65 72 2e 20 5e 49 66 20 74  ort order. ^If t
6640: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
6650: 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 61 6e   not a column an
6660: 64 20 68 61 73 20 6e 6f 0a 43 4f 4c 4c 41 54 45  d has no.COLLATE
6670: 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68   clause, then th
6680: 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
6690: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
66a0: 73 65 64 2e 0a 3c 2f 70 3e 20 20 0a 0a 3c 68 32  sed..</p>  ..<h2
66b0: 3e 43 6f 6c 6c 61 74 69 6f 6e 20 53 65 71 75 65  >Collation Seque
66c0: 6e 63 65 20 45 78 61 6d 70 6c 65 73 3c 2f 68 32  nce Examples</h2
66d0: 3e 0a 3c 70 3e 0a 54 68 65 20 65 78 61 6d 70 6c  >.<p>.The exampl
66e0: 65 73 20 62 65 6c 6f 77 20 69 64 65 6e 74 69 66  es below identif
66f0: 79 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  y the collating 
6700: 73 65 71 75 65 6e 63 65 73 20 74 68 61 74 20 77  sequences that w
6710: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a  ould be used to.
6720: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
6730: 73 75 6c 74 73 20 6f 66 20 74 65 78 74 20 63 6f  sults of text co
6740: 6d 70 61 72 69 73 6f 6e 73 20 74 68 61 74 20 6d  mparisons that m
6750: 61 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20  ay be performed 
6760: 62 79 20 76 61 72 69 6f 75 73 0a 53 51 4c 20 73  by various.SQL s
6770: 74 61 74 65 6d 65 6e 74 73 2e 20 4e 6f 74 65 20  tatements. Note 
6780: 74 68 61 74 20 61 20 74 65 78 74 20 63 6f 6d 70  that a text comp
6790: 61 72 69 73 6f 6e 20 6d 61 79 20 6e 6f 74 20 62  arison may not b
67a0: 65 20 72 65 71 75 69 72 65 64 2c 20 61 6e 64 20  e required, and 
67b0: 6e 6f 0a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  no.collating seq
67c0: 75 65 6e 63 65 20 75 73 65 64 2c 20 69 6e 20 74  uence used, in t
67d0: 68 65 20 63 61 73 65 20 6f 66 20 6e 75 6d 65 72  he case of numer
67e0: 69 63 2c 20 62 6c 6f 62 20 6f 72 20 4e 55 4c 4c  ic, blob or NULL
67f0: 20 76 61 6c 75 65 73 2e 0a 3c 2f 70 3e 0a 5e 28   values..</p>.^(
6800: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 72  <blockquote>.<pr
6810: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
6820: 74 31 28 0a 20 20 20 20 78 20 49 4e 54 45 47 45  t1(.    x INTEGE
6830: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  R PRIMARY KEY,. 
6840: 20 20 20 61 2c 20 20 20 20 20 20 20 20 20 20 20     a,           
6850: 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 61 74 69        /* collati
6860: 6e 67 20 73 65 71 75 65 6e 63 65 20 42 49 4e 41  ng sequence BINA
6870: 52 59 20 2a 2f 0a 20 20 20 20 62 20 43 4f 4c 4c  RY */.    b COLL
6880: 41 54 45 20 42 49 4e 41 52 59 2c 20 20 2f 2a 20  ATE BINARY,  /* 
6890: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
68a0: 63 65 20 42 49 4e 41 52 59 20 2a 2f 0a 20 20 20  ce BINARY */.   
68b0: 20 63 20 43 4f 4c 4c 41 54 45 20 52 54 52 49 4d   c COLLATE RTRIM
68c0: 2c 20 20 20 2f 2a 20 63 6f 6c 6c 61 74 69 6e 67  ,   /* collating
68d0: 20 73 65 71 75 65 6e 63 65 20 52 54 52 49 4d 20   sequence RTRIM 
68e0: 20 2a 2f 0a 20 20 20 20 64 20 43 4f 4c 4c 41 54   */.    d COLLAT
68f0: 45 20 4e 4f 43 41 53 45 20 20 20 2f 2a 20 63 6f  E NOCASE   /* co
6900: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
6910: 20 4e 4f 43 41 53 45 20 2a 2f 0a 29 3b 0a 20 20   NOCASE */.);.  
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6930: 20 2f 2a 20 78 20 20 20 61 20 20 20 20 20 62 20   /* x   a     b 
6940: 20 20 20 20 63 20 20 20 20 20 20 20 64 20 2a 2f      c       d */
6950: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  .INSERT INTO t1 
6960: 56 41 4c 55 45 53 28 31 2c 27 61 62 63 27 2c 27  VALUES(1,'abc','
6970: 61 62 63 27 2c 20 27 61 62 63 20 20 27 2c 27 61  abc', 'abc  ','a
6980: 62 63 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  bc');.INSERT INT
6990: 4f 20 74 31 20 56 41 4c 55 45 53 28 32 2c 27 61  O t1 VALUES(2,'a
69a0: 62 63 27 2c 27 61 62 63 27 2c 20 27 61 62 63 27  bc','abc', 'abc'
69b0: 2c 20 20 27 41 42 43 27 29 3b 0a 49 4e 53 45 52  ,  'ABC');.INSER
69c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
69d0: 28 33 2c 27 61 62 63 27 2c 27 61 62 63 27 2c 20  (3,'abc','abc', 
69e0: 27 61 62 63 20 27 2c 20 27 41 62 63 27 29 3b 0a  'abc ', 'Abc');.
69f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
6a00: 41 4c 55 45 53 28 34 2c 27 61 62 63 27 2c 27 61  ALUES(4,'abc','a
6a10: 62 63 20 27 2c 27 41 42 43 27 2c 20 20 27 61 62  bc ','ABC',  'ab
6a20: 63 27 29 3b 0a 20 0a 2f 2a 20 54 65 78 74 20 63  c');. ./* Text c
6a30: 6f 6d 70 61 72 69 73 6f 6e 20 61 3d 62 20 69 73  omparison a=b is
6a40: 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e 67   performed using
6a50: 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
6a60: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
6a70: 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  */.SELECT x FROM
6a80: 20 74 31 20 57 48 45 52 45 20 61 20 3d 20 62 20   t1 WHERE a = b 
6a90: 4f 52 44 45 52 20 42 59 20 78 3b 0a 2d 2d 72 65  ORDER BY x;.--re
6aa0: 73 75 6c 74 20 31 20 32 20 33 0a 0a 2f 2a 20 54  sult 1 2 3../* T
6ab0: 65 78 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 61  ext comparison a
6ac0: 3d 62 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20  =b is performed 
6ad0: 75 73 69 6e 67 20 74 68 65 20 52 54 52 49 4d 20  using the RTRIM 
6ae0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6af0: 63 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20  ce. */.SELECT x 
6b00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20  FROM t1 WHERE a 
6b10: 3d 20 62 20 43 4f 4c 4c 41 54 45 20 52 54 52 49  = b COLLATE RTRI
6b20: 4d 20 4f 52 44 45 52 20 42 59 20 78 3b 0a 2d 2d  M ORDER BY x;.--
6b30: 72 65 73 75 6c 74 20 31 20 32 20 33 20 34 0a 0a  result 1 2 3 4..
6b40: 2f 2a 20 54 65 78 74 20 63 6f 6d 70 61 72 69 73  /* Text comparis
6b50: 6f 6e 20 64 3d 61 20 69 73 20 70 65 72 66 6f 72  on d=a is perfor
6b60: 6d 65 64 20 75 73 69 6e 67 20 74 68 65 20 4e 4f  med using the NO
6b70: 43 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73  CASE collating s
6b80: 65 71 75 65 6e 63 65 2e 20 2a 2f 0a 53 45 4c 45  equence. */.SELE
6b90: 43 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45  CT x FROM t1 WHE
6ba0: 52 45 20 64 20 3d 20 61 20 4f 52 44 45 52 20 42  RE d = a ORDER B
6bb0: 59 20 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 31 20  Y x;.--result 1 
6bc0: 32 20 33 20 34 0a 0a 2f 2a 20 54 65 78 74 20 63  2 3 4../* Text c
6bd0: 6f 6d 70 61 72 69 73 6f 6e 20 61 3d 64 20 69 73  omparison a=d is
6be0: 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e 67   performed using
6bf0: 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
6c00: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
6c10: 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  */.SELECT x FROM
6c20: 20 74 31 20 57 48 45 52 45 20 61 20 3d 20 64 20   t1 WHERE a = d 
6c30: 4f 52 44 45 52 20 42 59 20 78 3b 0a 2d 2d 72 65  ORDER BY x;.--re
6c40: 73 75 6c 74 20 31 20 34 0a 0a 2f 2a 20 54 65 78  sult 1 4../* Tex
6c50: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 27 61 62  t comparison 'ab
6c60: 63 27 3d 63 20 69 73 20 70 65 72 66 6f 72 6d 65  c'=c is performe
6c70: 64 20 75 73 69 6e 67 20 74 68 65 20 52 54 52 49  d using the RTRI
6c80: 4d 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  M collating sequ
6c90: 65 6e 63 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20  ence. */.SELECT 
6ca0: 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  x FROM t1 WHERE 
6cb0: 27 61 62 63 27 20 3d 20 63 20 4f 52 44 45 52 20  'abc' = c ORDER 
6cc0: 42 59 20 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 31  BY x;.--result 1
6cd0: 20 32 20 33 0a 0a 2f 2a 20 54 65 78 74 20 63 6f   2 3../* Text co
6ce0: 6d 70 61 72 69 73 6f 6e 20 63 3d 27 61 62 63 27  mparison c='abc'
6cf0: 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 75 73   is performed us
6d00: 69 6e 67 20 74 68 65 20 52 54 52 49 4d 20 63 6f  ing the RTRIM co
6d10: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
6d20: 2e 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52  . */.SELECT x FR
6d30: 4f 4d 20 74 31 20 57 48 45 52 45 20 63 20 3d 20  OM t1 WHERE c = 
6d40: 27 61 62 63 27 20 4f 52 44 45 52 20 42 59 20 78  'abc' ORDER BY x
6d50: 3b 0a 2d 2d 72 65 73 75 6c 74 20 31 20 32 20 33  ;.--result 1 2 3
6d60: 0a 0a 2f 2a 20 47 72 6f 75 70 69 6e 67 20 69 73  ../* Grouping is
6d70: 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e 67   performed using
6d80: 20 74 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c   the NOCASE coll
6d90: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28  ating sequence (
6da0: 56 61 6c 75 65 73 0a 2a 2a 20 27 61 62 63 27 2c  Values.** 'abc',
6db0: 20 27 41 42 43 27 2c 20 61 6e 64 20 27 41 62 63   'ABC', and 'Abc
6dc0: 27 20 61 72 65 20 70 6c 61 63 65 64 20 69 6e 20  ' are placed in 
6dd0: 74 68 65 20 73 61 6d 65 20 67 72 6f 75 70 29 2e  the same group).
6de0: 20 2a 2f 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74   */.SELECT count
6df0: 28 2a 29 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  (*) FROM t1 GROU
6e00: 50 20 42 59 20 64 20 4f 52 44 45 52 20 42 59 20  P BY d ORDER BY 
6e10: 31 3b 0a 2d 2d 72 65 73 75 6c 74 20 34 0a 0a 2f  1;.--result 4../
6e20: 2a 20 47 72 6f 75 70 69 6e 67 20 69 73 20 70 65  * Grouping is pe
6e30: 72 66 6f 72 6d 65 64 20 75 73 69 6e 67 20 74 68  rformed using th
6e40: 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
6e50: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 27 61  ng sequence.  'a
6e60: 62 63 27 20 61 6e 64 0a 2a 2a 20 27 41 42 43 27  bc' and.** 'ABC'
6e70: 20 61 6e 64 20 27 41 62 63 27 20 66 6f 72 6d 20   and 'Abc' form 
6e80: 64 69 66 66 65 72 65 6e 74 20 67 72 6f 75 70 73  different groups
6e90: 20 2a 2f 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74   */.SELECT count
6ea0: 28 2a 29 20 46 52 4f 4d 20 74 31 20 47 52 4f 55  (*) FROM t1 GROU
6eb0: 50 20 42 59 20 28 64 20 7c 7c 20 27 27 29 20 4f  P BY (d || '') O
6ec0: 52 44 45 52 20 42 59 20 31 3b 0a 2d 2d 72 65 73  RDER BY 1;.--res
6ed0: 75 6c 74 20 31 20 31 20 32 0a 0a 2f 2a 20 53 6f  ult 1 1 2../* So
6ee0: 72 74 69 6e 67 20 6f 72 20 63 6f 6c 75 6d 6e 20  rting or column 
6ef0: 63 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 75  c is performed u
6f00: 73 69 6e 67 20 74 68 65 20 52 54 52 49 4d 20 63  sing the RTRIM c
6f10: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
6f20: 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46  e. */.SELECT x F
6f30: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
6f40: 63 2c 20 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 34  c, x;.--result 4
6f50: 20 31 20 32 20 33 0a 0a 2f 2a 20 53 6f 72 74 69   1 2 3../* Sorti
6f60: 6e 67 20 6f 66 20 28 63 7c 7c 27 27 29 20 69 73  ng of (c||'') is
6f70: 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e 67   performed using
6f80: 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c   the BINARY coll
6f90: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
6fa0: 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  */.SELECT x FROM
6fb0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 28 63 7c   t1 ORDER BY (c|
6fc0: 7c 27 27 29 2c 20 78 3b 0a 2d 2d 72 65 73 75 6c  |''), x;.--resul
6fd0: 74 20 34 20 32 20 33 20 31 0a 0a 2f 2a 20 53 6f  t 4 2 3 1../* So
6fe0: 72 74 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 20  rting of column 
6ff0: 63 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 75  c is performed u
7000: 73 69 6e 67 20 74 68 65 20 4e 4f 43 41 53 45 20  sing the NOCASE 
7010: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
7020: 63 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20  ce. */.SELECT x 
7030: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
7040: 20 63 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41 53   c COLLATE NOCAS
7050: 45 2c 20 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 32  E, x;.--result 2
7060: 20 34 20 33 20 31 0a 3c 2f 70 72 65 3e 0a 3c 2f   4 3 1.</pre>.</
7070: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a        blockquote>)^.