Documentation Source Text

Hex Artifact Content
Login

Artifact 8546dd862c52d8d288ded24dccf5703fbdb4bac8:


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 4f 74 68 65 72 77    <li><p>^Otherw
2dd0: 69 73 65 2c 20 61 6e 20 65 78 70 72 65 73 73 69  ise, an expressi
2de0: 6f 6e 20 68 61 73 20 6e 6f 20 61 66 66 69 6e 69  on has no affini
2df0: 74 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  ty..</ul>..<tcl>
2e00: 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 66 66 76  hd_fragment affv
2e10: 69 65 77 20 7b 72 75 6c 65 73 20 66 6f 72 20 64  iew {rules for d
2e20: 65 74 65 72 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d  etermining colum
2e30: 6e 20 61 66 66 69 6e 69 74 79 20 69 6e 20 56 49  n affinity in VI
2e40: 45 57 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43  EWs}</tcl>.<h2>C
2e50: 6f 6c 75 6d 6e 20 41 66 66 69 6e 69 74 79 20 46  olumn Affinity F
2e60: 6f 72 20 56 69 65 77 73 20 41 6e 64 20 53 75 62  or Views And Sub
2e70: 71 75 65 72 69 65 73 3c 2f 68 32 3e 0a 0a 3c 70  queries</h2>..<p
2e80: 3e 54 68 65 20 22 63 6f 6c 75 6d 6e 73 22 20 6f  >The "columns" o
2e90: 66 20 61 20 5b 56 49 45 57 5d 20 6f 72 20 46 52  f a [VIEW] or FR
2ea0: 4f 4d 2d 63 6c 61 75 73 65 20 73 75 62 71 75 65  OM-clause subque
2eb0: 72 79 20 61 72 65 20 72 65 61 6c 6c 79 0a 74 68  ry are really.th
2ec0: 65 20 65 78 70 72 65 73 73 69 6f 6e 73 0a 69 6e  e expressions.in
2ed0: 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2ee0: 6f 66 20 74 68 65 20 5b 53 45 4c 45 43 54 5d 20  of the [SELECT] 
2ef0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
2f00: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 56 49  mplements the VI
2f10: 45 57 0a 6f 72 20 73 75 62 71 75 65 72 79 2e 20  EW.or subquery. 
2f20: 20 54 68 75 73 2c 20 74 68 65 20 61 66 66 69 6e   Thus, the affin
2f30: 69 74 79 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20  ity for columns 
2f40: 6f 66 20 61 20 56 49 45 57 20 6f 72 20 73 75 62  of a VIEW or sub
2f50: 71 75 65 72 79 0a 61 72 65 20 64 65 74 65 72 6d  query.are determ
2f60: 69 6e 65 64 20 62 79 20 74 68 65 20 65 78 70 72  ined by the expr
2f70: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 20  ession affinity 
2f80: 72 75 6c 65 73 20 61 62 6f 76 65 2e 0a 43 6f 6e  rules above..Con
2f90: 73 69 64 65 72 20 61 6e 20 65 78 61 6d 70 6c 65  sider an example
2fa0: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
2fb0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
2fc0: 45 20 74 31 28 61 20 49 4e 54 2c 20 62 20 54 45  E t1(a INT, b TE
2fd0: 58 54 2c 20 63 20 52 45 41 4c 29 3b 0a 43 52 45  XT, c REAL);.CRE
2fe0: 41 54 45 20 56 49 45 57 20 76 31 28 78 2c 79 2c  ATE VIEW v1(x,y,
2ff0: 7a 29 20 41 53 20 53 45 4c 45 43 54 20 62 2c 20  z) AS SELECT b, 
3000: 61 2b 63 2c 20 34 32 20 46 52 4f 4d 20 74 31 20  a+c, 42 FROM t1 
3010: 57 48 45 52 45 20 62 21 3d 31 31 3b 0a 3c 2f 70  WHERE b!=11;.</p
3020: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
3030: 0a 0a 3c 70 3e 54 68 65 20 61 66 66 69 6e 69 74  ..<p>The affinit
3040: 79 20 6f 66 20 74 68 65 20 76 31 2e 78 20 63 6f  y of the v1.x co
3050: 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 74 68 65  lumn will be the
3060: 20 73 61 6d 65 20 61 73 20 74 68 65 20 61 66 66   same as the aff
3070: 69 6e 69 74 79 0a 6f 66 20 74 31 2e 62 20 28 49  inity.of t1.b (I
3080: 4e 54 45 47 45 52 29 2c 20 73 69 6e 63 65 20 76  NTEGER), since v
3090: 31 2e 78 20 6d 61 70 73 20 64 69 72 65 63 74 6c  1.x maps directl
30a0: 79 20 69 6e 74 6f 20 74 31 2e 62 2e 20 20 42 75  y into t1.b.  Bu
30b0: 74 0a 63 6f 6c 75 6d 6e 73 20 76 31 2e 79 20 61  t.columns v1.y a
30c0: 6e 64 20 76 31 2e 7a 20 62 6f 74 68 20 68 61 76  nd v1.z both hav
30d0: 65 20 6e 6f 20 61 66 66 69 6e 69 74 79 2c 20 73  e no affinity, s
30e0: 69 6e 63 65 20 74 68 6f 73 65 20 63 6f 6c 75 6d  ince those colum
30f0: 6e 73 0a 6d 61 70 20 69 6e 74 6f 20 65 78 70 72  ns.map into expr
3100: 65 73 73 69 6f 6e 20 61 2b 63 20 61 6e 64 20 34  ession a+c and 4
3110: 32 2c 20 61 6e 64 20 65 78 70 72 65 73 73 69 6f  2, and expressio
3120: 6e 73 20 61 6c 77 61 79 73 20 68 61 76 65 20 6e  ns always have n
3130: 6f 0a 61 66 66 69 6e 69 74 79 2e 0a 0a 3c 70 3e  o.affinity...<p>
3140: 57 68 65 6e 20 74 68 65 20 5b 53 45 4c 45 43 54  When the [SELECT
3150: 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  ] statement that
3160: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 5b 56   implements a [V
3170: 49 45 57 5d 20 6f 72 20 0a 46 52 4f 4d 2d 63 6c  IEW] or .FROM-cl
3180: 61 75 73 65 20 73 75 62 71 75 65 72 79 20 69 73  ause subquery is
3190: 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31a0: 45 43 54 5d 20 74 68 65 6e 20 74 68 65 20 61 66  ECT] then the af
31b0: 66 69 6e 69 74 79 20 6f 66 20 0a 65 61 63 68 20  finity of .each 
31c0: 73 75 70 70 6f 73 65 64 20 63 6f 6c 75 6d 6e 20  supposed column 
31d0: 6f 66 20 74 68 65 20 56 49 45 57 20 6f 72 20 73  of the VIEW or s
31e0: 75 62 71 75 65 72 79 20 77 69 6c 6c 0a 62 65 20  ubquery will.be 
31f0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
3200: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
3210: 67 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  g result column 
3220: 66 6f 72 0a 6f 6e 65 20 6f 66 20 74 68 65 20 69  for.one of the i
3230: 6e 64 69 76 69 64 75 61 6c 20 53 45 4c 45 43 54  ndividual SELECT
3240: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
3250: 20 6d 61 6b 65 20 75 70 20 0a 74 68 65 20 63 6f   make up .the co
3260: 6d 70 6f 75 6e 64 2e 20 20 0a 48 6f 77 65 76 65  mpound.  .Howeve
3270: 72 2c 20 69 74 20 69 73 20 69 6e 64 65 74 65 72  r, it is indeter
3280: 6d 69 6e 61 74 65 20 77 68 69 63 68 20 6f 66 20  minate which of 
3290: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
32a0: 6d 65 6e 74 73 20 77 69 6c 6c 20 0a 62 65 20 75  ments will .be u
32b0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
32c0: 20 61 66 66 69 6e 69 74 79 2e 0a 44 69 66 66 65   affinity..Diffe
32d0: 72 65 6e 74 20 63 6f 6e 73 74 69 74 75 65 6e 74  rent constituent
32e0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
32f0: 74 73 20 6d 69 67 68 74 20 62 65 20 75 73 65 64  ts might be used
3300: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 61   to determine .a
3310: 66 66 69 6e 69 74 79 20 61 74 20 64 69 66 66 65  ffinity at diffe
3320: 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
3330: 67 20 71 75 65 72 79 20 65 76 61 6c 75 61 74 69  g query evaluati
3340: 6f 6e 2e 0a 42 65 73 74 20 70 72 61 63 74 69 63  on..Best practic
3350: 65 20 69 73 20 74 6f 20 61 76 6f 69 64 20 6d 69  e is to avoid mi
3360: 78 69 6e 67 20 61 66 66 69 6e 69 74 69 65 73 20  xing affinities 
3370: 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  in a compound SE
3380: 4c 45 43 54 2e 0a 0a 0a 3c 68 32 3e 43 6f 6c 75  LECT....<h2>Colu
3390: 6d 6e 20 41 66 66 69 6e 69 74 79 20 42 65 68 61  mn Affinity Beha
33a0: 76 69 6f 72 20 45 78 61 6d 70 6c 65 3c 2f 68 32  vior Example</h2
33b0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
33c0: 69 6e 67 20 53 51 4c 20 64 65 6d 6f 6e 73 74 72  ing SQL demonstr
33d0: 61 74 65 73 20 68 6f 77 20 53 51 4c 69 74 65 20  ates how SQLite 
33e0: 75 73 65 73 20 63 6f 6c 75 6d 6e 20 61 66 66 69  uses column affi
33f0: 6e 69 74 79 0a 74 6f 20 64 6f 20 74 79 70 65 20  nity.to do type 
3400: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 77 68 65 6e  conversions when
3410: 20 76 61 6c 75 65 73 20 61 72 65 20 69 6e 73 65   values are inse
3420: 72 74 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c  rted into a tabl
3430: 65 2e 3c 2f 70 3e 0a 0a 5e 28 3c 62 6c 6f 63 6b  e.</p>..^(<block
3440: 71 75 6f 74 65 3e 0a 3c 70 72 65 3e 0a 43 52 45  quote>.<pre>.CRE
3450: 41 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20  ATE TABLE t1(.  
3460: 20 20 74 20 20 54 45 58 54 2c 20 20 20 20 20 2d    t  TEXT,     -
3470: 2d 20 74 65 78 74 20 61 66 66 69 6e 69 74 79 20  - text affinity 
3480: 62 79 20 72 75 6c 65 20 32 0a 20 20 20 20 6e 75  by rule 2.    nu
3490: 20 4e 55 4d 45 52 49 43 2c 20 20 2d 2d 20 6e 75   NUMERIC,  -- nu
34a0: 6d 65 72 69 63 20 61 66 66 69 6e 69 74 79 20 62  meric affinity b
34b0: 79 20 72 75 6c 65 20 35 0a 20 20 20 20 69 20 20  y rule 5.    i  
34c0: 49 4e 54 45 47 45 52 2c 20 20 2d 2d 20 69 6e 74  INTEGER,  -- int
34d0: 65 67 65 72 20 61 66 66 69 6e 69 74 79 20 62 79  eger affinity by
34e0: 20 72 75 6c 65 20 31 0a 20 20 20 20 72 20 20 52   rule 1.    r  R
34f0: 45 41 4c 2c 20 20 20 20 20 2d 2d 20 72 65 61 6c  EAL,     -- real
3500: 20 61 66 66 69 6e 69 74 79 20 62 79 20 72 75 6c   affinity by rul
3510: 65 20 34 0a 20 20 20 20 6e 6f 20 42 4c 4f 42 20  e 4.    no BLOB 
3520: 20 20 20 20 20 2d 2d 20 6e 6f 20 61 66 66 69 6e       -- no affin
3530: 69 74 79 20 62 79 20 72 75 6c 65 20 33 0a 29 3b  ity by rule 3.);
3540: 0a 0a 2d 2d 20 56 61 6c 75 65 73 20 73 74 6f 72  ..-- Values stor
3550: 65 64 20 61 73 20 54 45 58 54 2c 20 49 4e 54 45  ed as TEXT, INTE
3560: 47 45 52 2c 20 49 4e 54 45 47 45 52 2c 20 52 45  GER, INTEGER, RE
3570: 41 4c 2c 20 54 45 58 54 2e 0a 49 4e 53 45 52 54  AL, TEXT..INSERT
3580: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3590: 27 35 30 30 2e 30 27 2c 20 27 35 30 30 2e 30 27  '500.0', '500.0'
35a0: 2c 20 27 35 30 30 2e 30 27 2c 20 27 35 30 30 2e  , '500.0', '500.
35b0: 30 27 2c 20 27 35 30 30 2e 30 27 29 3b 0a 53 45  0', '500.0');.SE
35c0: 4c 45 43 54 20 74 79 70 65 6f 66 28 74 29 2c 20  LECT typeof(t), 
35d0: 74 79 70 65 6f 66 28 6e 75 29 2c 20 74 79 70 65  typeof(nu), type
35e0: 6f 66 28 69 29 2c 20 74 79 70 65 6f 66 28 72 29  of(i), typeof(r)
35f0: 2c 20 74 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f  , typeof(no) FRO
3600: 4d 20 74 31 3b 0a 74 65 78 74 7c 69 6e 74 65 67  M t1;.text|integ
3610: 65 72 7c 69 6e 74 65 67 65 72 7c 72 65 61 6c 7c  er|integer|real|
3620: 74 65 78 74 0a 0a 2d 2d 20 56 61 6c 75 65 73 20  text..-- Values 
3630: 73 74 6f 72 65 64 20 61 73 20 54 45 58 54 2c 20  stored as TEXT, 
3640: 49 4e 54 45 47 45 52 2c 20 49 4e 54 45 47 45 52  INTEGER, INTEGER
3650: 2c 20 52 45 41 4c 2c 20 52 45 41 4c 2e 0a 44 45  , REAL, REAL..DE
3660: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 49 4e  LETE FROM t1;.IN
3670: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3680: 55 45 53 28 35 30 30 2e 30 2c 20 35 30 30 2e 30  UES(500.0, 500.0
3690: 2c 20 35 30 30 2e 30 2c 20 35 30 30 2e 30 2c 20  , 500.0, 500.0, 
36a0: 35 30 30 2e 30 29 3b 0a 53 45 4c 45 43 54 20 74  500.0);.SELECT t
36b0: 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f 66  ypeof(t), typeof
36c0: 28 6e 75 29 2c 20 74 79 70 65 6f 66 28 69 29 2c  (nu), typeof(i),
36d0: 20 74 79 70 65 6f 66 28 72 29 2c 20 74 79 70 65   typeof(r), type
36e0: 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74 31 3b 0a  of(no) FROM t1;.
36f0: 74 65 78 74 7c 69 6e 74 65 67 65 72 7c 69 6e 74  text|integer|int
3700: 65 67 65 72 7c 72 65 61 6c 7c 72 65 61 6c 0a 0a  eger|real|real..
3710: 2d 2d 20 56 61 6c 75 65 73 20 73 74 6f 72 65 64  -- Values stored
3720: 20 61 73 20 54 45 58 54 2c 20 49 4e 54 45 47 45   as TEXT, INTEGE
3730: 52 2c 20 49 4e 54 45 47 45 52 2c 20 52 45 41 4c  R, INTEGER, REAL
3740: 2c 20 49 4e 54 45 47 45 52 2e 0a 44 45 4c 45 54  , INTEGER..DELET
3750: 45 20 46 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52  E FROM t1;.INSER
3760: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
3770: 28 35 30 30 2c 20 35 30 30 2c 20 35 30 30 2c 20  (500, 500, 500, 
3780: 35 30 30 2c 20 35 30 30 29 3b 0a 53 45 4c 45 43  500, 500);.SELEC
3790: 54 20 74 79 70 65 6f 66 28 74 29 2c 20 74 79 70  T typeof(t), typ
37a0: 65 6f 66 28 6e 75 29 2c 20 74 79 70 65 6f 66 28  eof(nu), typeof(
37b0: 69 29 2c 20 74 79 70 65 6f 66 28 72 29 2c 20 74  i), typeof(r), t
37c0: 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74  ypeof(no) FROM t
37d0: 31 3b 0a 74 65 78 74 7c 69 6e 74 65 67 65 72 7c  1;.text|integer|
37e0: 69 6e 74 65 67 65 72 7c 72 65 61 6c 7c 69 6e 74  integer|real|int
37f0: 65 67 65 72 0a 0a 2d 2d 20 42 4c 4f 42 73 20 61  eger..-- BLOBs a
3800: 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64  re always stored
3810: 20 61 73 20 42 4c 4f 42 73 20 72 65 67 61 72 64   as BLOBs regard
3820: 6c 65 73 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 61  less of column a
3830: 66 66 69 6e 69 74 79 2e 0a 44 45 4c 45 54 45 20  ffinity..DELETE 
3840: 46 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52 54 20  FROM t1;.INSERT 
3850: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 78  INTO t1 VALUES(x
3860: 27 30 35 30 30 27 2c 20 78 27 30 35 30 30 27 2c  '0500', x'0500',
3870: 20 78 27 30 35 30 30 27 2c 20 78 27 30 35 30 30   x'0500', x'0500
3880: 27 2c 20 78 27 30 35 30 30 27 29 3b 0a 53 45 4c  ', x'0500');.SEL
3890: 45 43 54 20 74 79 70 65 6f 66 28 74 29 2c 20 74  ECT typeof(t), t
38a0: 79 70 65 6f 66 28 6e 75 29 2c 20 74 79 70 65 6f  ypeof(nu), typeo
38b0: 66 28 69 29 2c 20 74 79 70 65 6f 66 28 72 29 2c  f(i), typeof(r),
38c0: 20 74 79 70 65 6f 66 28 6e 6f 29 20 46 52 4f 4d   typeof(no) FROM
38d0: 20 74 31 3b 0a 62 6c 6f 62 7c 62 6c 6f 62 7c 62   t1;.blob|blob|b
38e0: 6c 6f 62 7c 62 6c 6f 62 7c 62 6c 6f 62 0a 0a 2d  lob|blob|blob..-
38f0: 2d 20 4e 55 4c 4c 73 20 61 72 65 20 61 6c 73 6f  - NULLs are also
3900: 20 75 6e 61 66 66 65 63 74 65 64 20 62 79 20 61   unaffected by a
3910: 66 66 69 6e 69 74 79 0a 44 45 4c 45 54 45 20 46  ffinity.DELETE F
3920: 52 4f 4d 20 74 31 3b 0a 49 4e 53 45 52 54 20 49  ROM t1;.INSERT I
3930: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
3940: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c  LL,NULL,NULL,NUL
3950: 4c 2c 4e 55 4c 4c 29 3b 0a 53 45 4c 45 43 54 20  L,NULL);.SELECT 
3960: 74 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f  typeof(t), typeo
3970: 66 28 6e 75 29 2c 20 74 79 70 65 6f 66 28 69 29  f(nu), typeof(i)
3980: 2c 20 74 79 70 65 6f 66 28 72 29 2c 20 74 79 70  , typeof(r), typ
3990: 65 6f 66 28 6e 6f 29 20 46 52 4f 4d 20 74 31 3b  eof(no) FROM t1;
39a0: 0a 6e 75 6c 6c 7c 6e 75 6c 6c 7c 6e 75 6c 6c 7c  .null|null|null|
39b0: 6e 75 6c 6c 7c 6e 75 6c 6c 0a 3c 2f 70 72 65 3e  null|null.</pre>
39c0: 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
39d0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
39e0: 6e 74 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 7b  nt comparisons {
39f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65  comparison expre
3a00: 73 73 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  ssions}</tcl>.<h
3a10: 31 3e 43 6f 6d 70 61 72 69 73 6f 6e 20 45 78 70  1>Comparison Exp
3a20: 72 65 73 73 69 6f 6e 73 3c 2f 68 31 3e 0a 0a 3c  ressions</h1>..<
3a30: 70 3e 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  p>SQLite version
3a40: 20 33 20 68 61 73 20 74 68 65 20 75 73 75 61 6c   3 has the usual
3a50: 20 73 65 74 20 6f 66 20 53 51 4c 20 63 6f 6d 70   set of SQL comp
3a60: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
3a70: 0a 69 6e 63 6c 75 64 69 6e 67 20 22 3d 22 2c 20  .including "=", 
3a80: 22 3d 3d 22 2c 20 22 26 6c 74 3b 22 2c 20 22 26  "==", "&lt;", "&
3a90: 6c 74 3b 3d 22 2c 20 22 26 67 74 3b 22 2c 20 22  lt;=", "&gt;", "
3aa0: 26 67 74 3b 3d 22 2c 20 22 21 3d 22 2c 20 22 3c  &gt;=", "!=", "<
3ab0: 3e 22 2c 0a 22 49 4e 22 2c 20 22 4e 4f 54 20 49  >",."IN", "NOT I
3ac0: 4e 22 2c 20 22 42 45 54 57 45 45 4e 22 2c 20 22  N", "BETWEEN", "
3ad0: 49 53 22 2c 20 61 6e 64 20 22 49 53 20 4e 4f 54  IS", and "IS NOT
3ae0: 22 2c 20 2e 0a 0a 3c 68 32 3e 53 6f 72 74 20 4f  ", ...<h2>Sort O
3af0: 72 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rder</h2>..<p>Th
3b00: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  e results of a c
3b10: 6f 6d 70 61 72 69 73 6f 6e 20 64 65 70 65 6e 64  omparison depend
3b20: 20 6f 6e 20 74 68 65 20 73 74 6f 72 61 67 65 20   on the storage 
3b30: 63 6c 61 73 73 65 73 20 6f 66 20 74 68 65 0a 6f  classes of the.o
3b40: 70 65 72 61 6e 64 73 2c 20 61 63 63 6f 72 64 69  perands, accordi
3b50: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
3b60: 69 6e 67 20 72 75 6c 65 73 3a 3c 2f 70 3e 0a 3c  ing rules:</p>.<
3b70: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 41 20  ul>.  <li><p>^A 
3b80: 76 61 6c 75 65 20 77 69 74 68 20 73 74 6f 72 61  value with stora
3b90: 67 65 20 63 6c 61 73 73 20 4e 55 4c 4c 20 69 73  ge class NULL is
3ba0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
3bb0: 20 74 68 61 6e 20 61 6e 79 0a 20 20 6f 74 68 65   than any.  othe
3bc0: 72 20 76 61 6c 75 65 20 28 69 6e 63 6c 75 64 69  r value (includi
3bd0: 6e 67 20 61 6e 6f 74 68 65 72 20 76 61 6c 75 65  ng another value
3be0: 20 77 69 74 68 20 73 74 6f 72 61 67 65 20 63 6c   with storage cl
3bf0: 61 73 73 20 4e 55 4c 4c 29 2e 3c 2f 70 3e 0a 0a  ass NULL).</p>..
3c00: 20 20 3c 6c 69 3e 3c 70 3e 5e 41 6e 20 49 4e 54    <li><p>^An INT
3c10: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 76 61 6c  EGER or REAL val
3c20: 75 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ue is less than 
3c30: 61 6e 79 20 54 45 58 54 20 6f 72 20 42 4c 4f 42  any TEXT or BLOB
3c40: 20 76 61 6c 75 65 2e 0a 20 20 5e 57 68 65 6e 20   value..  ^When 
3c50: 61 6e 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45  an INTEGER or RE
3c60: 41 4c 20 69 73 20 63 6f 6d 70 61 72 65 64 20 74  AL is compared t
3c70: 6f 20 61 6e 6f 74 68 65 72 20 49 4e 54 45 47 45  o another INTEGE
3c80: 52 20 6f 72 20 52 45 41 4c 2c 20 61 0a 20 20 6e  R or REAL, a.  n
3c90: 75 6d 65 72 69 63 61 6c 20 63 6f 6d 70 61 72 69  umerical compari
3ca0: 73 6f 6e 20 69 73 20 70 65 72 66 6f 72 6d 65 64  son is performed
3cb0: 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  .</p>..  <li><p>
3cc0: 5e 41 20 54 45 58 54 20 76 61 6c 75 65 20 69 73  ^A TEXT value is
3cd0: 20 6c 65 73 73 20 74 68 61 6e 20 61 20 42 4c 4f   less than a BLO
3ce0: 42 20 76 61 6c 75 65 2e 20 20 5e 57 68 65 6e 20  B value.  ^When 
3cf0: 74 77 6f 20 54 45 58 54 20 76 61 6c 75 65 73 0a  two TEXT values.
3d00: 20 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 61    are compared a
3d10: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  n appropriate co
3d20: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
3d30: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
3d40: 72 6d 69 6e 65 20 0a 20 20 74 68 65 20 72 65 73  rmine .  the res
3d50: 75 6c 74 2e 20 20 3c 2f 70 3e 0a 0a 20 20 3c 6c  ult.  </p>..  <l
3d60: 69 3e 3c 70 3e 5e 57 68 65 6e 20 74 77 6f 20 42  i><p>^When two B
3d70: 4c 4f 42 20 76 61 6c 75 65 73 20 61 72 65 20 63  LOB values are c
3d80: 6f 6d 70 61 72 65 64 2c 20 74 68 65 20 72 65 73  ompared, the res
3d90: 75 6c 74 20 69 73 0a 20 20 64 65 74 65 72 6d 69  ult is.  determi
3da0: 6e 65 64 20 75 73 69 6e 67 20 6d 65 6d 63 6d 70  ned using memcmp
3db0: 28 29 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c  ().</p>.</ul>..<
3dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
3dd0: 63 6f 6d 70 61 66 66 20 7b 63 6f 6d 70 61 72 69  compaff {compari
3de0: 73 6f 6e 20 61 66 66 69 6e 69 74 79 20 72 75 6c  son affinity rul
3df0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 54 79  es}</tcl>.<h2>Ty
3e00: 70 65 20 43 6f 6e 76 65 72 73 69 6f 6e 73 20 50  pe Conversions P
3e10: 72 69 6f 72 20 54 6f 20 43 6f 6d 70 61 72 69 73  rior To Comparis
3e20: 6f 6e 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 53 51 4c  on</h2>..<p>^SQL
3e30: 69 74 65 20 6d 61 79 20 61 74 74 65 6d 70 74 20  ite may attempt 
3e40: 74 6f 20 63 6f 6e 76 65 72 74 20 76 61 6c 75 65  to convert value
3e50: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 73 74  s between the st
3e60: 6f 72 61 67 65 20 63 6c 61 73 73 65 73 0a 49 4e  orage classes.IN
3e70: 54 45 47 45 52 2c 20 52 45 41 4c 2c 20 61 6e 64  TEGER, REAL, and
3e80: 2f 6f 72 20 54 45 58 54 20 62 65 66 6f 72 65 20  /or TEXT before 
3e90: 70 65 72 66 6f 72 6d 69 6e 67 20 61 20 63 6f 6d  performing a com
3ea0: 70 61 72 69 73 6f 6e 2e 0a 5e 57 68 65 74 68 65  parison..^Whethe
3eb0: 72 20 6f 72 20 6e 6f 74 20 61 6e 79 20 63 6f 6e  r or not any con
3ec0: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 61 74 74  versions are att
3ed0: 65 6d 70 74 65 64 20 62 65 66 6f 72 65 20 74 68  empted before th
3ee0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 74 61 6b  e comparison tak
3ef0: 65 73 0a 70 6c 61 63 65 20 64 65 70 65 6e 64 73  es.place depends
3f00: 20 6f 6e 20 74 68 65 20 74 79 70 65 20 61 66 66   on the type aff
3f10: 69 6e 69 74 79 20 6f 66 20 74 68 65 20 6f 70 65  inity of the ope
3f20: 72 61 6e 64 73 2e 0a 0a 3c 70 3e 54 6f 20 22 61  rands...<p>To "a
3f30: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 22 20 6d  pply affinity" m
3f40: 65 61 6e 73 20 74 6f 20 63 6f 6e 76 65 72 74 20  eans to convert 
3f50: 61 6e 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  an operand to a 
3f60: 70 61 72 74 69 63 75 6c 61 72 20 73 74 6f 72 61  particular stora
3f70: 67 65 0a 63 6c 61 73 73 20 69 66 20 61 6e 64 20  ge.class if and 
3f80: 6f 6e 6c 79 20 69 66 20 74 68 65 20 63 6f 6e 76  only if the conv
3f90: 65 72 73 69 6f 6e 20 69 73 20 6c 6f 73 73 6c 65  ersion is lossle
3fa0: 73 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c  ss and reversibl
3fb0: 65 2e 0a 5e 28 41 66 66 69 6e 69 74 79 20 69 73  e..^(Affinity is
3fc0: 20 61 70 70 6c 69 65 64 20 74 6f 20 6f 70 65 72   applied to oper
3fd0: 61 6e 64 73 20 6f 66 20 61 20 63 6f 6d 70 61 72  ands of a compar
3fe0: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 70 72  ison operator pr
3ff0: 69 6f 72 20 74 6f 0a 74 68 65 20 63 6f 6d 70 61  ior to.the compa
4000: 72 69 73 6f 6e 20 61 63 63 6f 72 64 69 6e 67 20  rison according 
4010: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
4020: 20 72 75 6c 65 73 20 69 6e 20 74 68 65 20 6f 72   rules in the or
4030: 64 65 72 20 73 68 6f 77 6e 3a 29 5e 3c 2f 70 3e  der shown:)^</p>
4040: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49  ..<ul>.<li><p>^I
4050: 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 68 61  f one operand ha
4060: 73 20 49 4e 54 45 47 45 52 2c 20 52 45 41 4c 20  s INTEGER, REAL 
4070: 6f 72 20 4e 55 4d 45 52 49 43 20 61 66 66 69 6e  or NUMERIC affin
4080: 69 74 79 0a 61 6e 64 20 74 68 65 20 6f 74 68 65  ity.and the othe
4090: 72 20 6f 70 65 72 61 6e 64 20 68 61 73 20 54 45  r operand has TE
40a0: 58 54 20 6f 72 20 42 4c 4f 42 20 6f 72 20 6e 6f  XT or BLOB or no
40b0: 20 61 66 66 69 6e 69 74 79 0a 74 68 65 6e 20 4e   affinity.then N
40c0: 55 4d 45 52 49 43 20 61 66 66 69 6e 69 74 79 20  UMERIC affinity 
40d0: 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20 6f 74  is applied to ot
40e0: 68 65 72 20 6f 70 65 72 61 6e 64 2e 0a 0a 3c 6c  her operand...<l
40f0: 69 3e 3c 70 3e 5e 49 66 20 6f 6e 65 20 6f 70 65  i><p>^If one ope
4100: 72 61 6e 64 20 68 61 73 20 54 45 58 54 20 61 66  rand has TEXT af
4110: 66 69 6e 69 74 79 20 61 6e 64 20 74 68 65 20 6f  finity and the o
4120: 74 68 65 72 20 68 61 73 20 6e 6f 20 61 66 66 69  ther has no affi
4130: 6e 69 74 79 2c 0a 74 68 65 6e 20 54 45 58 54 20  nity,.then TEXT 
4140: 61 66 66 69 6e 69 74 79 20 69 73 20 61 70 70 6c  affinity is appl
4150: 69 65 64 20 74 6f 20 74 68 65 20 6f 74 68 65 72  ied to the other
4160: 20 6f 70 65 72 61 6e 64 2e 0a 0a 3c 6c 69 3e 3c   operand...<li><
4170: 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 6e 6f  p>^Otherwise, no
4180: 20 61 66 66 69 6e 69 74 79 20 69 73 20 61 70 70   affinity is app
4190: 6c 69 65 64 20 61 6e 64 20 62 6f 74 68 20 6f 70  lied and both op
41a0: 65 72 61 6e 64 73 20 61 72 65 20 63 6f 6d 70 61  erands are compa
41b0: 72 65 64 0a 61 73 20 69 73 2e 3c 2f 70 3e 0a 3c  red.as is.</p>.<
41c0: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 65  /ul>..<p>^(The e
41d0: 78 70 72 65 73 73 69 6f 6e 20 22 61 20 42 45 54  xpression "a BET
41e0: 57 45 45 4e 20 62 20 41 4e 44 20 63 22 20 69 73  WEEN b AND c" is
41f0: 20 74 72 65 61 74 65 64 20 61 73 20 74 77 6f 20   treated as two 
4200: 73 65 70 61 72 61 74 65 0a 62 69 6e 61 72 79 20  separate.binary 
4210: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 22 61 20 26  comparisons "a &
4220: 67 74 3b 3d 20 62 20 41 4e 44 20 61 20 26 6c 74  gt;= b AND a &lt
4230: 3b 3d 20 63 22 2c 20 65 76 65 6e 20 69 66 20 74  ;= c", even if t
4240: 68 61 74 20 6d 65 61 6e 73 0a 64 69 66 66 65 72  hat means.differ
4250: 65 6e 74 20 61 66 66 69 6e 69 74 69 65 73 20 61  ent affinities a
4260: 72 65 20 61 70 70 6c 69 65 64 20 74 6f 20 27 61  re applied to 'a
4270: 27 20 69 6e 20 65 61 63 68 20 6f 66 20 74 68 65  ' in each of the
4280: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 29 5e 0a   comparisons.)^.
4290: 5e 28 44 61 74 61 74 79 70 65 20 63 6f 6e 76 65  ^(Datatype conve
42a0: 72 73 69 6f 6e 73 20 69 6e 20 63 6f 6d 70 61 72  rsions in compar
42b0: 69 73 6f 6e 73 20 6f 66 20 74 68 65 0a 66 6f 72  isons of the.for
42c0: 6d 20 22 78 20 49 4e 20 28 53 45 4c 45 43 54 20  m "x IN (SELECT 
42d0: 79 20 2e 2e 2e 29 22 20 61 72 65 20 68 61 6e 64  y ...)" are hand
42e0: 6c 65 64 20 69 73 20 69 66 0a 74 68 65 20 63 6f  led is if.the co
42f0: 6d 70 61 72 69 73 6f 6e 20 77 65 72 65 20 72 65  mparison were re
4300: 61 6c 6c 79 20 22 78 3d 79 22 2e 29 5e 0a 5e 28  ally "x=y".)^.^(
4310: 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22  The expression "
4320: 61 20 49 4e 20 28 78 2c 20 79 2c 20 7a 2c 20 2e  a IN (x, y, z, .
4330: 2e 2e 29 22 20 69 73 20 65 71 75 69 76 61 6c 65  ..)" is equivale
4340: 6e 74 20 74 6f 20 22 61 20 3d 20 2b 78 20 4f 52  nt to "a = +x OR
4350: 0a 61 20 3d 20 2b 79 20 4f 52 20 61 20 3d 20 2b  .a = +y OR a = +
4360: 7a 20 4f 52 20 2e 2e 2e 22 2e 29 5e 20 20 0a 5e  z OR ...".)^  .^
4370: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
4380: 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 74 68  the values to th
4390: 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20 49  e right of the I
43a0: 4e 20 6f 70 65 72 61 74 6f 72 20 28 74 68 65 20  N operator (the 
43b0: 22 78 22 2c 20 22 79 22 2c 0a 61 6e 64 20 22 7a  "x", "y",.and "z
43c0: 22 20 76 61 6c 75 65 73 20 69 6e 20 74 68 69 73  " values in this
43d0: 20 65 78 61 6d 70 6c 65 29 20 61 72 65 20 63 6f   example) are co
43e0: 6e 73 69 64 65 72 65 64 20 74 6f 20 68 61 76 65  nsidered to have
43f0: 20 6e 6f 20 61 66 66 69 6e 69 74 79 2c 20 0a 65   no affinity, .e
4400: 76 65 6e 20 69 66 20 74 68 65 79 20 68 61 70 70  ven if they happ
4410: 65 6e 20 74 6f 20 62 65 20 63 6f 6c 75 6d 6e 20  en to be column 
4420: 76 61 6c 75 65 73 20 6f 72 20 43 41 53 54 20 65  values or CAST e
4430: 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 0a 3c 2f  xpressions.  .</
4440: 70 3e 0a 0a 3c 68 32 3e 43 6f 6d 70 61 72 69 73  p>..<h2>Comparis
4450: 6f 6e 20 45 78 61 6d 70 6c 65 3c 2f 68 32 3e 0a  on Example</h2>.
4460: 0a 5e 28 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  .^(<blockquote>.
4470: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
4480: 4c 45 20 74 31 28 0a 20 20 20 20 61 20 54 45 58  LE t1(.    a TEX
4490: 54 2c 20 20 20 20 20 20 2d 2d 20 74 65 78 74 20  T,      -- text 
44a0: 61 66 66 69 6e 69 74 79 0a 20 20 20 20 62 20 4e  affinity.    b N
44b0: 55 4d 45 52 49 43 2c 20 20 20 2d 2d 20 6e 75 6d  UMERIC,   -- num
44c0: 65 72 69 63 20 61 66 66 69 6e 69 74 79 0a 20 20  eric affinity.  
44d0: 20 20 63 20 42 4c 4f 42 2c 20 20 20 20 20 20 2d    c BLOB,      -
44e0: 2d 20 6e 6f 20 61 66 66 69 6e 69 74 79 0a 20 20  - no affinity.  
44f0: 20 20 64 20 20 20 20 20 20 20 20 20 20 20 20 2d    d            -
4500: 2d 20 6e 6f 20 61 66 66 69 6e 69 74 79 0a 29 3b  - no affinity.);
4510: 0a 0a 2d 2d 20 56 61 6c 75 65 73 20 77 69 6c 6c  ..-- Values will
4520: 20 62 65 20 73 74 6f 72 65 64 20 61 73 20 54 45   be stored as TE
4530: 58 54 2c 20 49 4e 54 45 47 45 52 2c 20 54 45 58  XT, INTEGER, TEX
4540: 54 2c 20 61 6e 64 20 49 4e 54 45 47 45 52 20 72  T, and INTEGER r
4550: 65 73 70 65 63 74 69 76 65 6c 79 0a 49 4e 53 45  espectively.INSE
4560: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
4570: 53 28 27 35 30 30 27 2c 20 27 35 30 30 27 2c 20  S('500', '500', 
4580: 27 35 30 30 27 2c 20 35 30 30 29 3b 0a 53 45 4c  '500', 500);.SEL
4590: 45 43 54 20 74 79 70 65 6f 66 28 61 29 2c 20 74  ECT typeof(a), t
45a0: 79 70 65 6f 66 28 62 29 2c 20 74 79 70 65 6f 66  ypeof(b), typeof
45b0: 28 63 29 2c 20 74 79 70 65 6f 66 28 64 29 20 46  (c), typeof(d) F
45c0: 52 4f 4d 20 74 31 3b 0a 74 65 78 74 7c 69 6e 74  ROM t1;.text|int
45d0: 65 67 65 72 7c 74 65 78 74 7c 69 6e 74 65 67 65  eger|text|intege
45e0: 72 0a 0a 2d 2d 20 42 65 63 61 75 73 65 20 63 6f  r..-- Because co
45f0: 6c 75 6d 6e 20 22 61 22 20 68 61 73 20 74 65 78  lumn "a" has tex
4600: 74 20 61 66 66 69 6e 69 74 79 2c 20 6e 75 6d 65  t affinity, nume
4610: 72 69 63 20 76 61 6c 75 65 73 20 6f 6e 20 74 68  ric values on th
4620: 65 0a 2d 2d 20 72 69 67 68 74 2d 68 61 6e 64 20  e.-- right-hand 
4630: 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
4640: 61 72 69 73 6f 6e 73 20 61 72 65 20 63 6f 6e 76  arisons are conv
4650: 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 62 65  erted to text be
4660: 66 6f 72 65 0a 2d 2d 20 74 68 65 20 63 6f 6d 70  fore.-- the comp
4670: 61 72 69 73 6f 6e 20 6f 63 63 75 72 73 2e 0a 53  arison occurs..S
4680: 45 4c 45 43 54 20 61 20 26 6c 74 3b 20 34 30 2c  ELECT a &lt; 40,
4690: 20 20 20 61 20 26 6c 74 3b 20 36 30 2c 20 20 20     a &lt; 60,   
46a0: 61 20 26 6c 74 3b 20 36 30 30 20 46 52 4f 4d 20  a &lt; 600 FROM 
46b0: 74 31 3b 0a 30 7c 31 7c 31 0a 0a 2d 2d 20 54 65  t1;.0|1|1..-- Te
46c0: 78 74 20 61 66 66 69 6e 69 74 79 20 69 73 20 61  xt affinity is a
46d0: 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 72 69  pplied to the ri
46e0: 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61 6e 64  ght-hand operand
46f0: 73 20 62 75 74 20 73 69 6e 63 65 0a 2d 2d 20 74  s but since.-- t
4700: 68 65 79 20 61 72 65 20 61 6c 72 65 61 64 79 20  hey are already 
4710: 54 45 58 54 20 74 68 69 73 20 69 73 20 61 20 6e  TEXT this is a n
4720: 6f 2d 6f 70 3b 20 6e 6f 20 63 6f 6e 76 65 72 73  o-op; no convers
4730: 69 6f 6e 73 20 6f 63 63 75 72 2e 0a 53 45 4c 45  ions occur..SELE
4740: 43 54 20 61 20 26 6c 74 3b 20 27 34 30 27 2c 20  CT a &lt; '40', 
4750: 61 20 26 6c 74 3b 20 27 36 30 27 2c 20 61 20 26  a &lt; '60', a &
4760: 6c 74 3b 20 27 36 30 30 27 20 46 52 4f 4d 20 74  lt; '600' FROM t
4770: 31 3b 0a 30 7c 31 7c 31 0a 0a 2d 2d 20 43 6f 6c  1;.0|1|1..-- Col
4780: 75 6d 6e 20 22 62 22 20 68 61 73 20 6e 75 6d 65  umn "b" has nume
4790: 72 69 63 20 61 66 66 69 6e 69 74 79 20 61 6e 64  ric affinity and
47a0: 20 73 6f 20 6e 75 6d 65 72 69 63 20 61 66 66 69   so numeric affi
47b0: 6e 69 74 79 20 69 73 20 61 70 70 6c 69 65 64 0a  nity is applied.
47c0: 2d 2d 20 74 6f 20 74 68 65 20 6f 70 65 72 61 6e  -- to the operan
47d0: 64 73 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e  ds on the right.
47e0: 20 20 53 69 6e 63 65 20 74 68 65 20 6f 70 65 72    Since the oper
47f0: 61 6e 64 73 20 61 72 65 20 61 6c 72 65 61 64 79  ands are already
4800: 20 6e 75 6d 65 72 69 63 2c 0a 2d 2d 20 74 68 65   numeric,.-- the
4810: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20   application of 
4820: 61 66 66 69 6e 69 74 79 20 69 73 20 61 20 6e 6f  affinity is a no
4830: 2d 6f 70 3b 20 6e 6f 20 63 6f 6e 76 65 72 73 69  -op; no conversi
4840: 6f 6e 73 20 6f 63 63 75 72 2e 20 20 41 6c 6c 0a  ons occur.  All.
4850: 2d 2d 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  -- values are co
4860: 6d 70 61 72 65 64 20 6e 75 6d 65 72 69 63 61 6c  mpared numerical
4870: 6c 79 2e 0a 53 45 4c 45 43 54 20 62 20 26 6c 74  ly..SELECT b &lt
4880: 3b 20 34 30 2c 20 20 20 62 20 26 6c 74 3b 20 36  ; 40,   b &lt; 6
4890: 30 2c 20 20 20 62 20 26 6c 74 3b 20 36 30 30 20  0,   b &lt; 600 
48a0: 46 52 4f 4d 20 74 31 3b 0a 30 7c 30 7c 31 0a 0a  FROM t1;.0|0|1..
48b0: 2d 2d 20 4e 75 6d 65 72 69 63 20 61 66 66 69 6e  -- Numeric affin
48c0: 69 74 79 20 69 73 20 61 70 70 6c 69 65 64 20 74  ity is applied t
48d0: 6f 20 6f 70 65 72 61 6e 64 73 20 6f 6e 20 74 68  o operands on th
48e0: 65 20 72 69 67 68 74 2c 20 63 6f 6e 76 65 72 74  e right, convert
48f0: 69 6e 67 20 74 68 65 6d 0a 2d 2d 20 66 72 6f 6d  ing them.-- from
4900: 20 74 65 78 74 20 74 6f 20 69 6e 74 65 67 65 72   text to integer
4910: 73 2e 20 20 54 68 65 6e 20 61 20 6e 75 6d 65 72  s.  Then a numer
4920: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 63  ic comparison oc
4930: 63 75 72 73 2e 0a 53 45 4c 45 43 54 20 62 20 26  curs..SELECT b &
4940: 6c 74 3b 20 27 34 30 27 2c 20 62 20 26 6c 74 3b  lt; '40', b &lt;
4950: 20 27 36 30 27 2c 20 62 20 26 6c 74 3b 20 27 36   '60', b &lt; '6
4960: 30 30 27 20 46 52 4f 4d 20 74 31 3b 0a 30 7c 30  00' FROM t1;.0|0
4970: 7c 31 0a 0a 2d 2d 20 4e 6f 20 61 66 66 69 6e 69  |1..-- No affini
4980: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f  ty conversions o
4990: 63 63 75 72 2e 20 20 52 69 67 68 74 2d 68 61 6e  ccur.  Right-han
49a0: 64 20 73 69 64 65 20 76 61 6c 75 65 73 20 61 6c  d side values al
49b0: 6c 20 68 61 76 65 0a 2d 2d 20 73 74 6f 72 61 67  l have.-- storag
49c0: 65 20 63 6c 61 73 73 20 49 4e 54 45 47 45 52 20  e class INTEGER 
49d0: 77 68 69 63 68 20 61 72 65 20 61 6c 77 61 79 73  which are always
49e0: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 54   less than the T
49f0: 45 58 54 20 76 61 6c 75 65 73 0a 2d 2d 20 6f 6e  EXT values.-- on
4a00: 20 74 68 65 20 6c 65 66 74 2e 0a 53 45 4c 45 43   the left..SELEC
4a10: 54 20 63 20 26 6c 74 3b 20 34 30 2c 20 20 20 63  T c &lt; 40,   c
4a20: 20 26 6c 74 3b 20 36 30 2c 20 20 20 63 20 26 6c   &lt; 60,   c &l
4a30: 74 3b 20 36 30 30 20 46 52 4f 4d 20 74 31 3b 0a  t; 600 FROM t1;.
4a40: 30 7c 30 7c 30 0a 0a 2d 2d 20 4e 6f 20 61 66 66  0|0|0..-- No aff
4a50: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
4a60: 73 20 6f 63 63 75 72 2e 20 20 56 61 6c 75 65 73  s occur.  Values
4a70: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 61 73   are compared as
4a80: 20 54 45 58 54 2e 0a 53 45 4c 45 43 54 20 63 20   TEXT..SELECT c 
4a90: 26 6c 74 3b 20 27 34 30 27 2c 20 63 20 26 6c 74  &lt; '40', c &lt
4aa0: 3b 20 27 36 30 27 2c 20 63 20 26 6c 74 3b 20 27  ; '60', c &lt; '
4ab0: 36 30 30 27 20 46 52 4f 4d 20 74 31 3b 0a 30 7c  600' FROM t1;.0|
4ac0: 31 7c 31 0a 0a 2d 2d 20 4e 6f 20 61 66 66 69 6e  1|1..-- No affin
4ad0: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
4ae0: 6f 63 63 75 72 2e 20 20 52 69 67 68 74 2d 68 61  occur.  Right-ha
4af0: 6e 64 20 73 69 64 65 20 76 61 6c 75 65 73 20 61  nd side values a
4b00: 6c 6c 20 68 61 76 65 0a 2d 2d 20 73 74 6f 72 61  ll have.-- stora
4b10: 67 65 20 63 6c 61 73 73 20 49 4e 54 45 47 45 52  ge class INTEGER
4b20: 20 77 68 69 63 68 20 63 6f 6d 70 61 72 65 20 6e   which compare n
4b30: 75 6d 65 72 69 63 61 6c 6c 79 20 77 69 74 68 20  umerically with 
4b40: 74 68 65 20 49 4e 54 45 47 45 52 0a 2d 2d 20 76  the INTEGER.-- v
4b50: 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 6c 65 66  alues on the lef
4b60: 74 2e 0a 53 45 4c 45 43 54 20 64 20 26 6c 74 3b  t..SELECT d &lt;
4b70: 20 34 30 2c 20 20 20 64 20 26 6c 74 3b 20 36 30   40,   d &lt; 60
4b80: 2c 20 20 20 64 20 26 6c 74 3b 20 36 30 30 20 46  ,   d &lt; 600 F
4b90: 52 4f 4d 20 74 31 3b 0a 30 7c 30 7c 31 0a 0a 2d  ROM t1;.0|0|1..-
4ba0: 2d 20 4e 6f 20 61 66 66 69 6e 69 74 79 20 63 6f  - No affinity co
4bb0: 6e 76 65 72 73 69 6f 6e 73 20 6f 63 63 75 72 2e  nversions occur.
4bc0: 20 20 49 4e 54 45 47 45 52 20 76 61 6c 75 65 73    INTEGER values
4bd0: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61 72 65   on the left are
4be0: 0a 2d 2d 20 61 6c 77 61 79 73 20 6c 65 73 73 20  .-- always less 
4bf0: 74 68 61 6e 20 54 45 58 54 20 76 61 6c 75 65 73  than TEXT values
4c00: 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 53   on the right..S
4c10: 45 4c 45 43 54 20 64 20 26 6c 74 3b 20 27 34 30  ELECT d &lt; '40
4c20: 27 2c 20 64 20 26 6c 74 3b 20 27 36 30 27 2c 20  ', d &lt; '60', 
4c30: 64 20 26 6c 74 3b 20 27 36 30 30 27 20 46 52 4f  d &lt; '600' FRO
4c40: 4d 20 74 31 3b 0a 31 7c 31 7c 31 0a 3c 2f 70 72  M t1;.1|1|1.</pr
4c50: 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  e>.</blockquote>
4c60: 29 5e 0a 0a 3c 70 3e 5e 41 6c 6c 20 6f 66 20 74  )^..<p>^All of t
4c70: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 74 68 65  he result in the
4c80: 20 65 78 61 6d 70 6c 65 20 61 72 65 20 74 68 65   example are the
4c90: 20 73 61 6d 65 20 69 66 20 74 68 65 20 63 6f 6d   same if the com
4ca0: 70 61 72 69 73 6f 6e 73 20 61 72 65 0a 63 6f 6d  parisons are.com
4cb0: 6d 75 74 65 64 20 2d 20 69 66 20 65 78 70 72 65  muted - if expre
4cc0: 73 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 66 6f  ssions of the fo
4cd0: 72 6d 20 22 61 26 6c 74 3b 34 30 22 20 61 72 65  rm "a&lt;40" are
4ce0: 20 72 65 77 72 69 74 74 65 6e 0a 61 73 20 22 34   rewritten.as "4
4cf0: 30 26 67 74 3b 61 22 2e 0a 0a 3c 68 31 3e 4f 70  0&gt;a"...<h1>Op
4d00: 65 72 61 74 6f 72 73 3c 2f 68 31 3e 0a 0a 3c 70  erators</h1>..<p
4d10: 3e 5e 28 41 6c 6c 20 6d 61 74 68 65 6d 61 74 69  >^(All mathemati
4d20: 63 61 6c 20 6f 70 65 72 61 74 6f 72 73 20 28 2b  cal operators (+
4d30: 2c 20 2d 2c 20 2a 2c 20 2f 2c 20 25 2c 20 26 6c  , -, *, /, %, &l
4d40: 74 3b 26 6c 74 3b 2c 20 26 67 74 3b 26 67 74 3b  t;&lt;, &gt;&gt;
4d50: 2c 0a 26 61 6d 70 3b 2c 20 61 6e 64 20 7c 29 0a  ,.&amp;, and |).
4d60: 63 61 73 74 20 62 6f 74 68 20 6f 70 65 72 61 6e  cast both operan
4d70: 64 73 20 74 6f 20 74 68 65 20 4e 55 4d 45 52 49  ds to the NUMERI
4d80: 43 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 20  C storage class 
4d90: 70 72 69 6f 72 20 74 6f 20 62 65 69 6e 67 20 63  prior to being c
4da0: 61 72 72 69 65 64 20 6f 75 74 2e 29 5e 0a 5e 54  arried out.)^.^T
4db0: 68 65 20 63 61 73 74 20 69 73 20 63 61 72 72 69  he cast is carri
4dc0: 65 64 20 74 68 72 6f 75 67 68 20 65 76 65 6e 20  ed through even 
4dd0: 69 66 20 69 74 20 69 73 20 6c 6f 73 73 79 20 61  if it is lossy a
4de0: 6e 64 20 69 72 72 65 76 65 72 73 69 62 6c 65 2e  nd irreversible.
4df0: 0a 5e 41 20 4e 55 4c 4c 20 6f 70 65 72 61 6e 64  .^A NULL operand
4e00: 20 6f 6e 20 61 20 6d 61 74 68 65 6d 61 74 69 63   on a mathematic
4e10: 61 6c 20 6f 70 65 72 61 74 6f 72 20 79 69 65 6c  al operator yiel
4e20: 64 73 20 61 20 4e 55 4c 4c 20 72 65 73 75 6c 74  ds a NULL result
4e30: 2e 0a 5e 28 41 6e 20 6f 70 65 72 61 6e 64 20 6f  ..^(An operand o
4e40: 6e 20 61 20 6d 61 74 68 65 6d 61 74 69 63 61 6c  n a mathematical
4e50: 20 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20 64   operator that d
4e60: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 69 6e 20  oes not look in 
4e70: 61 6e 79 20 77 61 79 0a 6e 75 6d 65 72 69 63 20  any way.numeric 
4e80: 61 6e 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20  and is not NULL 
4e90: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
4ea0: 30 20 6f 72 20 30 2e 30 2e 29 5e 0a 3c 2f 70 3e  0 or 0.0.)^.</p>
4eb0: 0a 0a 3c 68 31 3e 53 6f 72 74 69 6e 67 2c 20 47  ..<h1>Sorting, G
4ec0: 72 6f 75 70 69 6e 67 20 61 6e 64 20 43 6f 6d 70  rouping and Comp
4ed0: 6f 75 6e 64 20 53 45 4c 45 43 54 73 3c 2f 68 31  ound SELECTs</h1
4ee0: 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 71 75 65 72  >..<p>^When quer
4ef0: 79 20 72 65 73 75 6c 74 73 20 61 72 65 20 73 6f  y results are so
4f00: 72 74 65 64 20 62 79 20 61 6e 20 4f 52 44 45 52  rted by an ORDER
4f10: 20 42 59 20 63 6c 61 75 73 65 2c 20 76 61 6c 75   BY clause, valu
4f20: 65 73 20 77 69 74 68 20 73 74 6f 72 61 67 65 0a  es with storage.
4f30: 63 6c 61 73 73 20 4e 55 4c 4c 20 63 6f 6d 65 20  class NULL come 
4f40: 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64 20  first, followed 
4f50: 62 79 20 49 4e 54 45 47 45 52 20 61 6e 64 20 52  by INTEGER and R
4f60: 45 41 4c 20 76 61 6c 75 65 73 0a 69 6e 74 65 72  EAL values.inter
4f70: 73 70 65 72 73 65 64 20 69 6e 20 6e 75 6d 65 72  spersed in numer
4f80: 69 63 20 6f 72 64 65 72 2c 20 66 6f 6c 6c 6f 77  ic order, follow
4f90: 65 64 20 62 79 20 54 45 58 54 20 76 61 6c 75 65  ed by TEXT value
4fa0: 73 20 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 0a 73  s in collating.s
4fb0: 65 71 75 65 6e 63 65 20 6f 72 64 65 72 2c 20 61  equence order, a
4fc0: 6e 64 20 66 69 6e 61 6c 6c 79 20 42 4c 4f 42 20  nd finally BLOB 
4fd0: 76 61 6c 75 65 73 20 69 6e 20 6d 65 6d 63 6d 70  values in memcmp
4fe0: 28 29 20 6f 72 64 65 72 2e 20 20 5e 4e 6f 20 73  () order.  ^No s
4ff0: 74 6f 72 61 67 65 0a 63 6c 61 73 73 20 63 6f 6e  torage.class con
5000: 76 65 72 73 69 6f 6e 73 20 6f 63 63 75 72 20 62  versions occur b
5010: 65 66 6f 72 65 20 74 68 65 20 73 6f 72 74 2e 3c  efore the sort.<
5020: 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 67 72  /p>..<p>^When gr
5030: 6f 75 70 69 6e 67 20 76 61 6c 75 65 73 20 77 69  ouping values wi
5040: 74 68 20 74 68 65 20 47 52 4f 55 50 20 42 59 20  th the GROUP BY 
5050: 63 6c 61 75 73 65 20 76 61 6c 75 65 73 20 77 69  clause values wi
5060: 74 68 0a 64 69 66 66 65 72 65 6e 74 20 73 74 6f  th.different sto
5070: 72 61 67 65 20 63 6c 61 73 73 65 73 20 61 72 65  rage classes are
5080: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74   considered dist
5090: 69 6e 63 74 2c 20 65 78 63 65 70 74 20 66 6f 72  inct, except for
50a0: 20 49 4e 54 45 47 45 52 0a 61 6e 64 20 52 45 41   INTEGER.and REA
50b0: 4c 20 76 61 6c 75 65 73 20 77 68 69 63 68 20 61  L values which a
50c0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71  re considered eq
50d0: 75 61 6c 20 69 66 20 74 68 65 79 20 61 72 65 20  ual if they are 
50e0: 6e 75 6d 65 72 69 63 61 6c 6c 79 0a 65 71 75 61  numerically.equa
50f0: 6c 2e 20 5e 4e 6f 20 61 66 66 69 6e 69 74 69 65  l. ^No affinitie
5100: 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74 6f  s are applied to
5110: 20 61 6e 79 20 76 61 6c 75 65 73 20 61 73 20 74   any values as t
5120: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 0a 47  he result of a.G
5130: 52 4f 55 50 20 62 79 20 63 6c 61 75 73 65 2e 3c  ROUP by clause.<
5140: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 6f 6d  /p>..<p>^The com
5150: 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6f 70 65  pound SELECT ope
5160: 72 61 74 6f 72 73 20 55 4e 49 4f 4e 2c 0a 49 4e  rators UNION,.IN
5170: 54 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45  TERSECT and EXCE
5180: 50 54 20 70 65 72 66 6f 72 6d 20 69 6d 70 6c 69  PT perform impli
5190: 63 69 74 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  cit comparisons 
51a0: 62 65 74 77 65 65 6e 20 76 61 6c 75 65 73 2e 0a  between values..
51b0: 5e 4e 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20  ^No affinity is 
51c0: 61 70 70 6c 69 65 64 20 74 6f 20 63 6f 6d 70 61  applied to compa
51d0: 72 69 73 6f 6e 20 6f 70 65 72 61 6e 64 73 20 66  rison operands f
51e0: 6f 72 20 74 68 65 20 69 6d 70 6c 69 63 69 74 0a  or the implicit.
51f0: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 73 73 6f  comparisons asso
5200: 63 69 61 74 65 64 20 77 69 74 68 20 55 4e 49 4f  ciated with UNIO
5210: 4e 2c 20 49 4e 54 45 52 53 45 43 54 2c 20 6f 72  N, INTERSECT, or
5220: 20 45 58 43 45 50 54 20 2d 20 74 68 65 20 76 61   EXCEPT - the va
5230: 6c 75 65 73 0a 61 72 65 20 63 6f 6d 70 61 72 65  lues.are compare
5240: 64 20 61 73 20 69 73 2e 3c 2f 70 3e 0a 0a 3c 74  d as is.</p>..<t
5250: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
5260: 6f 6c 6c 61 74 69 6f 6e 20 7b 2a 63 6f 6c 6c 61  ollation {*colla
5270: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7d 20 7b  ting sequence} {
5280: 2a 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65  *collating seque
5290: 6e 63 65 73 7d 5c 0a 20 20 20 20 20 20 20 20 20  nces}\.         
52a0: 20 20 20 20 20 20 20 20 7b 63 6f 6c 6c 61 74 69          {collati
52b0: 6e 67 20 66 75 6e 63 74 69 6f 6e 7d 20 2a 63 6f  ng function} *co
52c0: 6c 6c 61 74 69 6f 6e 20 2a 42 49 4e 41 52 59 20  llation *BINARY 
52d0: 2a 4e 4f 43 41 53 45 20 2a 52 54 52 49 4d 20 5c  *NOCASE *RTRIM \
52e0: 0a 20 20 20 20 20 20 20 20 7b 42 49 4e 41 52 59  .        {BINARY
52f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
5300: 69 6f 6e 7d 20 5c 0a 20 20 20 20 20 20 20 20 7b  ion} \.        {
5310: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6e 67  NOCASE collating
5320: 20 66 75 6e 63 74 69 6f 6e 7d 20 5c 0a 20 20 20   function} \.   
5330: 20 20 20 20 20 7b 52 54 52 49 4d 20 63 6f 6c 6c       {RTRIM coll
5340: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 7d 3c  ating function}<
5350: 2f 74 63 6c 3e 0a 3c 68 31 3e 43 6f 6c 6c 61 74  /tcl>.<h1>Collat
5360: 69 6e 67 20 53 65 71 75 65 6e 63 65 73 3c 2f 68  ing Sequences</h
5370: 31 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 53 51 4c  1>..<p>^When SQL
5380: 69 74 65 20 63 6f 6d 70 61 72 65 73 20 74 77 6f  ite compares two
5390: 20 73 74 72 69 6e 67 73 2c 20 69 74 20 75 73 65   strings, it use
53a0: 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  s a collating se
53b0: 71 75 65 6e 63 65 20 6f 72 0a 63 6f 6c 6c 61 74  quence or.collat
53c0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 28 74 77  ing function (tw
53d0: 6f 20 77 6f 72 64 73 20 66 6f 72 20 74 68 65 20  o words for the 
53e0: 73 61 6d 65 20 74 68 69 6e 67 29 20 74 6f 20 64  same thing) to d
53f0: 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a 73  etermine which.s
5400: 74 72 69 6e 67 20 69 73 20 67 72 65 61 74 65 72  tring is greater
5410: 20 6f 72 20 69 66 20 74 68 65 20 74 77 6f 20 73   or if the two s
5420: 74 72 69 6e 67 73 20 61 72 65 20 65 71 75 61 6c  trings are equal
5430: 2e 0a 5e 53 51 4c 69 74 65 20 68 61 73 20 74 68  ..^SQLite has th
5440: 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c  ree built-in col
5450: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
5460: 3a 20 20 42 49 4e 41 52 59 2c 20 4e 4f 43 41 53  :  BINARY, NOCAS
5470: 45 2c 20 61 6e 64 20 0a 52 54 52 49 4d 2e 3c 2f  E, and .RTRIM.</
5480: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 28 3c  p>..<ul>.<li>^(<
5490: 62 3e 42 49 4e 41 52 59 3c 2f 62 3e 20 2d 20 43  b>BINARY</b> - C
54a0: 6f 6d 70 61 72 65 73 20 73 74 72 69 6e 67 20 64  ompares string d
54b0: 61 74 61 20 75 73 69 6e 67 20 6d 65 6d 63 6d 70  ata using memcmp
54c0: 28 29 2c 20 72 65 67 61 72 64 6c 65 73 73 0a 20  (), regardless. 
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54e0: 20 20 6f 66 20 74 65 78 74 20 65 6e 63 6f 64 69    of text encodi
54f0: 6e 67 2e 3c 2f 6c 69 3e 29 5e 0a 3c 6c 69 3e 5e  ng.</li>)^.<li>^
5500: 28 3c 62 3e 4e 4f 43 41 53 45 3c 2f 62 3e 20 2d  (<b>NOCASE</b> -
5510: 20 54 68 65 20 73 61 6d 65 20 61 73 20 62 69 6e   The same as bin
5520: 61 72 79 2c 20 65 78 63 65 70 74 20 74 68 65 20  ary, except the 
5530: 32 36 20 75 70 70 65 72 20 63 61 73 65 0a 20 20  26 upper case.  
5540: 20 20 20 63 68 61 72 61 63 74 65 72 73 20 6f 66     characters of
5550: 20 41 53 43 49 49 20 61 72 65 20 66 6f 6c 64 65   ASCII are folde
5560: 64 20 74 6f 20 74 68 65 69 72 20 6c 6f 77 65 72  d to their lower
5570: 20 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74   case equivalent
5580: 73 20 62 65 66 6f 72 65 0a 20 20 20 20 20 74 68  s before.     th
5590: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
55a0: 70 65 72 66 6f 72 6d 65 64 2e 29 5e 20 20 4e 6f  performed.)^  No
55b0: 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43  te that only ASC
55c0: 49 49 20 63 68 61 72 61 63 74 65 72 73 0a 20 20  II characters.  
55d0: 20 20 20 61 72 65 20 63 61 73 65 20 66 6f 6c 64     are case fold
55e0: 65 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73  ed.  SQLite does
55f0: 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
5600: 64 6f 20 66 75 6c 6c 0a 20 20 20 20 20 55 54 46  do full.     UTF
5610: 20 63 61 73 65 20 66 6f 6c 64 69 6e 67 20 64 75   case folding du
5620: 65 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  e to the size of
5630: 20 74 68 65 20 74 61 62 6c 65 73 20 72 65 71 75   the tables requ
5640: 69 72 65 64 2e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  ired.</li>..<li>
5650: 5e 28 3c 62 3e 52 54 52 49 4d 3c 2f 62 3e 20 2d  ^(<b>RTRIM</b> -
5660: 20 54 68 65 20 73 61 6d 65 20 61 73 20 62 69 6e   The same as bin
5670: 61 72 79 2c 20 65 78 63 65 70 74 20 74 68 61 74  ary, except that
5680: 20 74 72 61 69 6c 69 6e 67 20 73 70 61 63 65 0a   trailing space.
5690: 20 20 20 20 20 63 68 61 72 61 63 74 65 72 73 20       characters 
56a0: 61 72 65 20 69 67 6e 6f 72 65 64 2e 29 5e 3c 2f  are ignored.)^</
56b0: 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 6e  li>.</ul>..<p>An
56c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e   application can
56d0: 20 72 65 67 69 73 74 65 72 20 61 64 64 69 74 69   register additi
56e0: 6f 6e 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 66  onal collating f
56f0: 75 6e 63 74 69 6f 6e 73 20 75 73 69 6e 67 0a 74  unctions using.t
5700: 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61  he [sqlite3_crea
5710: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20  te_collation()] 
5720: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
5730: 3c 68 32 3e 41 73 73 69 67 6e 69 6e 67 20 43 6f  <h2>Assigning Co
5740: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
5750: 73 20 66 72 6f 6d 20 53 51 4c 3c 2f 68 32 3e 0a  s from SQL</h2>.
5760: 0a 3c 70 3e 0a 5e 45 76 65 72 79 20 63 6f 6c 75  .<p>.^Every colu
5770: 6d 6e 20 6f 66 20 65 76 65 72 79 0a 74 61 62 6c  mn of every.tabl
5780: 65 20 68 61 73 20 61 6e 20 61 73 73 6f 63 69 61  e has an associa
5790: 74 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ted collating fu
57a0: 6e 63 74 69 6f 6e 2e 20 20 5e 49 66 20 6e 6f 20  nction.  ^If no 
57b0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
57c0: 6f 6e 0a 69 73 20 65 78 70 6c 69 63 69 74 6c 79  on.is explicitly
57d0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74   defined, then t
57e0: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  he collating fun
57f0: 63 74 69 6f 6e 20 64 65 66 61 75 6c 74 73 20 74  ction defaults t
5800: 6f 20 42 49 4e 41 52 59 2e 0a 5e 54 68 65 20 43  o BINARY..^The C
5810: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 66  OLLATE clause of
5820: 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66   the [column def
5830: 69 6e 69 74 69 6f 6e 5d 20 69 73 20 75 73 65 64  inition] is used
5840: 0a 74 6f 20 64 65 66 69 6e 65 20 61 6c 74 65 72  .to define alter
5850: 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67  native collating
5860: 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 61   functions for a
5870: 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 70 3e 0a 0a 3c   column..</p>..<
5880: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
5890: 63 6f 6c 72 75 6c 65 73 20 7b 68 6f 77 20 63 6f  colrules {how co
58a0: 6c 6c 61 74 69 6f 6e 20 69 73 20 64 65 74 65 72  llation is deter
58b0: 6d 69 6e 65 64 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  mined}</tcl>..<p
58c0: 3e 0a 5e 28 54 68 65 20 72 75 6c 65 73 20 66 6f  >.^(The rules fo
58d0: 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 77 68  r determining wh
58e0: 69 63 68 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ich collating fu
58f0: 6e 63 74 69 6f 6e 20 74 6f 20 75 73 65 20 66 6f  nction to use fo
5900: 72 20 61 0a 62 69 6e 61 72 79 20 63 6f 6d 70 61  r a.binary compa
5910: 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20 28  rison operator (
5920: 3d 2c 20 26 6c 74 3b 2c 20 26 67 74 3b 2c 20 26  =, &lt;, &gt;, &
5930: 6c 74 3b 3d 2c 20 26 67 74 3b 3d 2c 20 21 3d 2c  lt;=, &gt;=, !=,
5940: 20 49 53 2c 20 61 6e 64 0a 49 53 20 4e 4f 54 29   IS, and.IS NOT)
5950: 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a   are as follows:
5960: 29 5e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  )^..<ol>.<li><p>
5970: 5e 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61  ^If either opera
5980: 6e 64 20 68 61 73 20 61 6e 20 65 78 70 6c 69 63  nd has an explic
5990: 69 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  it collating fun
59a0: 63 74 69 6f 6e 20 61 73 73 69 67 6e 6d 65 6e 74  ction assignment
59b0: 0a 75 73 69 6e 67 20 74 68 65 20 70 6f 73 74 66  .using the postf
59c0: 69 78 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72  ix [COLLATE oper
59d0: 61 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20  ator], then the 
59e0: 65 78 70 6c 69 63 69 74 20 63 6f 6c 6c 61 74 69  explicit collati
59f0: 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 69 73 20 75  ng function.is u
5a00: 73 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  sed for comparis
5a10: 6f 6e 2c 20 77 69 74 68 20 70 72 65 63 65 64 65  on, with precede
5a20: 6e 63 65 20 74 6f 20 74 68 65 20 63 6f 6c 6c 61  nce to the colla
5a30: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6f 66  ting function of
5a40: 20 74 68 65 0a 6c 65 66 74 20 6f 70 65 72 61 6e   the.left operan
5a50: 64 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  d.</p></li>..<li
5a60: 3e 3c 70 3e 5e 49 66 20 65 69 74 68 65 72 20 6f  ><p>^If either o
5a70: 70 65 72 61 6e 64 20 69 73 20 61 20 63 6f 6c 75  perand is a colu
5a80: 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  mn, then the col
5a90: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
5aa0: 6f 66 0a 74 68 61 74 20 63 6f 6c 75 6d 6e 20 69  of.that column i
5ab0: 73 20 75 73 65 64 20 77 69 74 68 20 70 72 65 63  s used with prec
5ac0: 65 64 65 6e 63 65 20 74 6f 20 74 68 65 20 6c 65  edence to the le
5ad0: 66 74 20 6f 70 65 72 61 6e 64 2e 0a 5e 46 6f 72  ft operand..^For
5ae0: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
5af0: 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 65   the previous se
5b00: 6e 74 65 6e 63 65 2c 20 61 20 63 6f 6c 75 6d 6e  ntence, a column
5b10: 20 6e 61 6d 65 0a 70 72 65 63 65 64 65 64 20 62   name.preceded b
5b20: 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 75 6e  y one or more un
5b30: 61 72 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72  ary "+" operator
5b40: 73 20 69 73 20 73 74 69 6c 6c 20 63 6f 6e 73 69  s is still consi
5b50: 64 65 72 65 64 20 61 20 63 6f 6c 75 6d 6e 20 6e  dered a column n
5b60: 61 6d 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  ame..</p></li>..
5b70: 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
5b80: 65 2c 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  e, the BINARY co
5b90: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
5ba0: 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d   is used for com
5bb0: 70 61 72 69 73 6f 6e 2e 0a 3c 2f 70 3e 3c 2f 6c  parison..</p></l
5bc0: 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41  i>.</ol>..<p>.^A
5bd0: 6e 20 6f 70 65 72 61 6e 64 20 6f 66 20 61 20 63  n operand of a c
5be0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 63 6f 6e  omparison is con
5bf0: 73 69 64 65 72 65 64 20 74 6f 20 68 61 76 65 20  sidered to have 
5c00: 61 6e 20 65 78 70 6c 69 63 69 74 0a 63 6f 6c 6c  an explicit.coll
5c10: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61  ating function a
5c20: 73 73 69 67 6e 6d 65 6e 74 20 28 72 75 6c 65 20  ssignment (rule 
5c30: 31 20 61 62 6f 76 65 29 20 0a 69 66 20 61 6e 79  1 above) .if any
5c40: 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 20 6f   subexpression o
5c50: 66 20 74 68 65 20 6f 70 65 72 61 6e 64 20 75 73  f the operand us
5c60: 65 73 0a 74 68 65 20 70 6f 73 74 66 69 78 20 5b  es.the postfix [
5c70: 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
5c80: 5d 2e 20 20 5e 54 68 75 73 2c 20 69 66 20 61 20  ].  ^Thus, if a 
5c90: 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
5ca0: 72 5d 20 69 73 20 75 73 65 64 0a 61 6e 79 77 68  r] is used.anywh
5cb0: 65 72 65 20 69 6e 20 61 20 63 6f 6d 70 61 72 69  ere in a compari
5cc0: 73 69 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 2c  sion expression,
5cd0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66   the collating f
5ce0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 65 64 0a  unction defined.
5cf0: 62 79 20 74 68 61 74 20 6f 70 65 72 61 74 6f 72  by that operator
5d00: 20 69 73 20 75 73 65 64 20 66 6f 72 20 73 74 72   is used for str
5d10: 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  ing comparison r
5d20: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 61  egardless of wha
5d30: 74 20 0a 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73  t .table columns
5d40: 20 6d 69 67 68 74 20 62 65 20 61 20 70 61 72 74   might be a part
5d50: 20 6f 66 20 74 68 61 74 20 65 78 70 72 65 73 73   of that express
5d60: 69 6f 6e 2e 20 20 5e 49 66 20 74 77 6f 20 6f 72  ion.  ^If two or
5d70: 20 6d 6f 72 65 0a 5b 43 4f 4c 4c 41 54 45 20 6f   more.[COLLATE o
5d80: 70 65 72 61 74 6f 72 5d 20 73 75 62 65 78 70 72  perator] subexpr
5d90: 65 73 73 69 6f 6e 73 20 61 70 70 65 61 72 20 61  essions appear a
5da0: 6e 79 77 68 65 72 65 20 69 6e 20 61 20 63 6f 6d  nywhere in a com
5db0: 70 61 72 69 73 6f 6e 2c 20 74 68 65 20 0a 6c 65  parison, the .le
5dc0: 66 74 20 6d 6f 73 74 20 65 78 70 6c 69 63 69 74  ft most explicit
5dd0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
5de0: 69 6f 6e 20 69 73 20 75 73 65 64 20 72 65 67 61  ion is used rega
5df0: 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 64 65  rdless of how de
5e00: 65 70 6c 79 20 74 68 65 0a 43 4f 4c 4c 41 54 45  eply the.COLLATE
5e10: 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 6e   operators are n
5e20: 65 73 74 65 64 20 69 6e 20 74 68 65 20 65 78 70  ested in the exp
5e30: 72 65 73 73 69 6f 6e 20 61 6e 64 20 72 65 67 61  ression and rega
5e40: 72 64 6c 65 73 73 20 6f 66 0a 68 6f 77 20 74 68  rdless of.how th
5e50: 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
5e60: 70 61 72 65 6e 74 68 65 73 69 7a 65 64 2e 0a 3c  parenthesized..<
5e70: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 65 78  /p>..<p>.^The ex
5e80: 70 72 65 73 73 69 6f 6e 20 22 78 20 42 45 54 57  pression "x BETW
5e90: 45 45 4e 20 79 20 61 6e 64 20 7a 22 20 69 73 20  EEN y and z" is 
5ea0: 6c 6f 67 69 63 61 6c 6c 79 0a 65 71 75 69 76 61  logically.equiva
5eb0: 6c 65 6e 74 20 74 6f 20 74 77 6f 20 63 6f 6d 70  lent to two comp
5ec0: 61 72 69 73 6f 6e 73 20 22 78 20 26 67 74 3b 3d  arisons "x &gt;=
5ed0: 20 79 20 41 4e 44 20 78 20 26 6c 74 3b 3d 20 7a   y AND x &lt;= z
5ee0: 22 20 61 6e 64 20 77 6f 72 6b 73 20 77 69 74 68  " and works with
5ef0: 0a 72 65 73 70 65 63 74 20 74 6f 20 63 6f 6c 6c  .respect to coll
5f00: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  ating functions 
5f10: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 74 77  as if it were tw
5f20: 6f 20 73 65 70 61 72 61 74 65 20 63 6f 6d 70 61  o separate compa
5f30: 72 69 73 6f 6e 73 2e 0a 5e 28 54 68 65 20 65 78  risons..^(The ex
5f40: 70 72 65 73 73 69 6f 6e 20 22 78 20 49 4e 20 28  pression "x IN (
5f50: 53 45 4c 45 43 54 20 79 20 2e 2e 2e 29 22 20 69  SELECT y ...)" i
5f60: 73 20 68 61 6e 64 6c 65 64 20 69 6e 20 74 68 65  s handled in the
5f70: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
5f80: 0a 65 78 70 72 65 73 73 69 6f 6e 20 22 78 20 3d  .expression "x =
5f90: 20 79 22 20 66 6f 72 20 74 68 65 20 70 75 72 70   y" for the purp
5fa0: 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
5fb0: 69 6e 67 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e  ing the collatin
5fc0: 67 20 73 65 71 75 65 6e 63 65 2e 29 5e 0a 5e 28  g sequence.)^.^(
5fd0: 54 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  The collating se
5fe0: 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72 20  quence used for 
5ff0: 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 74  expressions of t
6000: 68 65 20 66 6f 72 6d 20 0a 22 78 20 49 4e 20 28  he form ."x IN (
6010: 79 2c 20 7a 2c 20 2e 2e 2e 29 22 20 69 73 20 74  y, z, ...)" is t
6020: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
6030: 75 65 6e 63 65 20 6f 66 20 78 2e 29 5e 0a 3c 2f  uence of x.)^.</
6040: 70 3e 20 20 0a 0a 3c 70 3e 0a 5e 54 65 72 6d 73  p>  ..<p>.^Terms
6050: 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20 42 59   of the ORDER BY
6060: 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 73 20   clause that is 
6070: 70 61 72 74 20 6f 66 20 61 20 5b 53 45 4c 45 43  part of a [SELEC
6080: 54 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  T].statement may
6090: 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20 63   be assigned a c
60a0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
60b0: 65 20 75 73 69 6e 67 20 74 68 65 20 0a 5b 43 4f  e using the .[CO
60c0: 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
60d0: 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
60e0: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c  he specified col
60f0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
6100: 69 73 0a 75 73 65 64 20 66 6f 72 20 73 6f 72 74  is.used for sort
6110: 69 6e 67 2e 0a 5e 4f 74 68 65 72 77 69 73 65 2c  ing..^Otherwise,
6120: 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
6130: 6f 6e 20 73 6f 72 74 65 64 20 62 79 20 61 6e 20  on sorted by an 
6140: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
6150: 69 73 0a 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  is.a column, the
6160: 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  n the collating 
6170: 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
6180: 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 20 74  column is used t
6190: 6f 0a 64 65 74 65 72 6d 69 6e 65 20 73 6f 72 74  o.determine sort
61a0: 20 6f 72 64 65 72 2e 20 5e 49 66 20 74 68 65 20   order. ^If the 
61b0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f  expression is no
61c0: 74 20 61 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 68  t a column and h
61d0: 61 73 20 6e 6f 0a 43 4f 4c 4c 41 54 45 20 63 6c  as no.COLLATE cl
61e0: 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 42  ause, then the B
61f0: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
6200: 73 65 71 75 65 6e 63 65 20 69 73 20 75 73 65 64  sequence is used
6210: 2e 0a 3c 2f 70 3e 20 20 0a 0a 3c 68 32 3e 43 6f  ..</p>  ..<h2>Co
6220: 6c 6c 61 74 69 6f 6e 20 53 65 71 75 65 6e 63 65  llation Sequence
6230: 20 45 78 61 6d 70 6c 65 73 3c 2f 68 32 3e 0a 3c   Examples</h2>.<
6240: 70 3e 0a 54 68 65 20 65 78 61 6d 70 6c 65 73 20  p>.The examples 
6250: 62 65 6c 6f 77 20 69 64 65 6e 74 69 66 79 20 74  below identify t
6260: 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
6270: 75 65 6e 63 65 73 20 74 68 61 74 20 77 6f 75 6c  uences that woul
6280: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 64 65 74  d be used to.det
6290: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
62a0: 74 73 20 6f 66 20 74 65 78 74 20 63 6f 6d 70 61  ts of text compa
62b0: 72 69 73 6f 6e 73 20 74 68 61 74 20 6d 61 79 20  risons that may 
62c0: 62 65 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20  be performed by 
62d0: 76 61 72 69 6f 75 73 0a 53 51 4c 20 73 74 61 74  various.SQL stat
62e0: 65 6d 65 6e 74 73 2e 20 4e 6f 74 65 20 74 68 61  ements. Note tha
62f0: 74 20 61 20 74 65 78 74 20 63 6f 6d 70 61 72 69  t a text compari
6300: 73 6f 6e 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  son may not be r
6310: 65 71 75 69 72 65 64 2c 20 61 6e 64 20 6e 6f 0a  equired, and no.
6320: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
6330: 63 65 20 75 73 65 64 2c 20 69 6e 20 74 68 65 20  ce used, in the 
6340: 63 61 73 65 20 6f 66 20 6e 75 6d 65 72 69 63 2c  case of numeric,
6350: 20 62 6c 6f 62 20 6f 72 20 4e 55 4c 4c 20 76 61   blob or NULL va
6360: 6c 75 65 73 2e 0a 3c 2f 70 3e 0a 5e 28 3c 62 6c  lues..</p>.^(<bl
6370: 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 72 65 3e 0a  ockquote>.<pre>.
6380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
6390: 0a 20 20 20 20 78 20 49 4e 54 45 47 45 52 20 50  .    x INTEGER P
63a0: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20  RIMARY KEY,.    
63b0: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
63c0: 20 20 20 2f 2a 20 63 6f 6c 6c 61 74 69 6e 67 20     /* collating 
63d0: 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59 20  sequence BINARY 
63e0: 2a 2f 0a 20 20 20 20 62 20 43 4f 4c 4c 41 54 45  */.    b COLLATE
63f0: 20 42 49 4e 41 52 59 2c 20 20 2f 2a 20 63 6f 6c   BINARY,  /* col
6400: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
6410: 42 49 4e 41 52 59 20 2a 2f 0a 20 20 20 20 63 20  BINARY */.    c 
6420: 43 4f 4c 4c 41 54 45 20 52 54 52 49 4d 2c 20 20  COLLATE RTRIM,  
6430: 20 2f 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65   /* collating se
6440: 71 75 65 6e 63 65 20 52 54 52 49 4d 20 20 2a 2f  quence RTRIM  */
6450: 0a 20 20 20 20 64 20 43 4f 4c 4c 41 54 45 20 4e  .    d COLLATE N
6460: 4f 43 41 53 45 20 20 20 2f 2a 20 63 6f 6c 6c 61  OCASE   /* colla
6470: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 4e 4f  ting sequence NO
6480: 43 41 53 45 20 2a 2f 0a 29 3b 0a 20 20 20 20 20  CASE */.);.     
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
64a0: 20 78 20 20 20 61 20 20 20 20 20 62 20 20 20 20   x   a     b    
64b0: 20 63 20 20 20 20 20 20 20 64 20 2a 2f 0a 49 4e   c       d */.IN
64c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
64d0: 55 45 53 28 31 2c 27 61 62 63 27 2c 27 61 62 63  UES(1,'abc','abc
64e0: 27 2c 20 27 61 62 63 20 20 27 2c 27 61 62 63 27  ', 'abc  ','abc'
64f0: 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  );.INSERT INTO t
6500: 31 20 56 41 4c 55 45 53 28 32 2c 27 61 62 63 27  1 VALUES(2,'abc'
6510: 2c 27 61 62 63 27 2c 20 27 61 62 63 27 2c 20 20  ,'abc', 'abc',  
6520: 27 41 42 43 27 29 3b 0a 49 4e 53 45 52 54 20 49  'ABC');.INSERT I
6530: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
6540: 27 61 62 63 27 2c 27 61 62 63 27 2c 20 27 61 62  'abc','abc', 'ab
6550: 63 20 27 2c 20 27 41 62 63 27 29 3b 0a 49 4e 53  c ', 'Abc');.INS
6560: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6570: 45 53 28 34 2c 27 61 62 63 27 2c 27 61 62 63 20  ES(4,'abc','abc 
6580: 27 2c 27 41 42 43 27 2c 20 20 27 61 62 63 27 29  ','ABC',  'abc')
6590: 3b 0a 20 0a 2f 2a 20 54 65 78 74 20 63 6f 6d 70  ;. ./* Text comp
65a0: 61 72 69 73 6f 6e 20 61 3d 62 20 69 73 20 70 65  arison a=b is pe
65b0: 72 66 6f 72 6d 65 64 20 75 73 69 6e 67 20 74 68  rformed using th
65c0: 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
65d0: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a  ng sequence. */.
65e0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
65f0: 20 57 48 45 52 45 20 61 20 3d 20 62 20 4f 52 44   WHERE a = b ORD
6600: 45 52 20 42 59 20 78 3b 0a 2d 2d 72 65 73 75 6c  ER BY x;.--resul
6610: 74 20 31 20 32 20 33 0a 0a 2f 2a 20 54 65 78 74  t 1 2 3../* Text
6620: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 61 3d 62 20   comparison a=b 
6630: 69 73 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69  is performed usi
6640: 6e 67 20 74 68 65 20 52 54 52 49 4d 20 63 6f 6c  ng the RTRIM col
6650: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
6660: 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f   */.SELECT x FRO
6670: 4d 20 74 31 20 57 48 45 52 45 20 61 20 3d 20 62  M t1 WHERE a = b
6680: 20 43 4f 4c 4c 41 54 45 20 52 54 52 49 4d 20 4f   COLLATE RTRIM O
6690: 52 44 45 52 20 42 59 20 78 3b 0a 2d 2d 72 65 73  RDER BY x;.--res
66a0: 75 6c 74 20 31 20 32 20 33 20 34 0a 0a 2f 2a 20  ult 1 2 3 4../* 
66b0: 54 65 78 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  Text comparison 
66c0: 64 3d 61 20 69 73 20 70 65 72 66 6f 72 6d 65 64  d=a is performed
66d0: 20 75 73 69 6e 67 20 74 68 65 20 4e 4f 43 41 53   using the NOCAS
66e0: 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  E collating sequ
66f0: 65 6e 63 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20  ence. */.SELECT 
6700: 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  x FROM t1 WHERE 
6710: 64 20 3d 20 61 20 4f 52 44 45 52 20 42 59 20 78  d = a ORDER BY x
6720: 3b 0a 2d 2d 72 65 73 75 6c 74 20 31 20 32 20 33  ;.--result 1 2 3
6730: 20 34 0a 0a 2f 2a 20 54 65 78 74 20 63 6f 6d 70   4../* Text comp
6740: 61 72 69 73 6f 6e 20 61 3d 64 20 69 73 20 70 65  arison a=d is pe
6750: 72 66 6f 72 6d 65 64 20 75 73 69 6e 67 20 74 68  rformed using th
6760: 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
6770: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a  ng sequence. */.
6780: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
6790: 20 57 48 45 52 45 20 61 20 3d 20 64 20 4f 52 44   WHERE a = d ORD
67a0: 45 52 20 42 59 20 78 3b 0a 2d 2d 72 65 73 75 6c  ER BY x;.--resul
67b0: 74 20 31 20 34 0a 0a 2f 2a 20 54 65 78 74 20 63  t 1 4../* Text c
67c0: 6f 6d 70 61 72 69 73 6f 6e 20 27 61 62 63 27 3d  omparison 'abc'=
67d0: 63 20 69 73 20 70 65 72 66 6f 72 6d 65 64 20 75  c is performed u
67e0: 73 69 6e 67 20 74 68 65 20 52 54 52 49 4d 20 63  sing the RTRIM c
67f0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
6800: 65 2e 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46  e. */.SELECT x F
6810: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 27 61 62  ROM t1 WHERE 'ab
6820: 63 27 20 3d 20 63 20 4f 52 44 45 52 20 42 59 20  c' = c ORDER BY 
6830: 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 31 20 32 20  x;.--result 1 2 
6840: 33 0a 0a 2f 2a 20 54 65 78 74 20 63 6f 6d 70 61  3../* Text compa
6850: 72 69 73 6f 6e 20 63 3d 27 61 62 63 27 20 69 73  rison c='abc' is
6860: 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e 67   performed using
6870: 20 74 68 65 20 52 54 52 49 4d 20 63 6f 6c 6c 61   the RTRIM colla
6880: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 2a  ting sequence. *
6890: 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  /.SELECT x FROM 
68a0: 74 31 20 57 48 45 52 45 20 63 20 3d 20 27 61 62  t1 WHERE c = 'ab
68b0: 63 27 20 4f 52 44 45 52 20 42 59 20 78 3b 0a 2d  c' ORDER BY x;.-
68c0: 2d 72 65 73 75 6c 74 20 31 20 32 20 33 0a 0a 2f  -result 1 2 3../
68d0: 2a 20 47 72 6f 75 70 69 6e 67 20 69 73 20 70 65  * Grouping is pe
68e0: 72 66 6f 72 6d 65 64 20 75 73 69 6e 67 20 74 68  rformed using th
68f0: 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69  e NOCASE collati
6900: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 56 61 6c  ng sequence (Val
6910: 75 65 73 0a 2a 2a 20 27 61 62 63 27 2c 20 27 41  ues.** 'abc', 'A
6920: 42 43 27 2c 20 61 6e 64 20 27 41 62 63 27 20 61  BC', and 'Abc' a
6930: 72 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65  re placed in the
6940: 20 73 61 6d 65 20 67 72 6f 75 70 29 2e 20 2a 2f   same group). */
6950: 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  .SELECT count(*)
6960: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
6970: 59 20 64 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  Y d ORDER BY 1;.
6980: 2d 2d 72 65 73 75 6c 74 20 34 0a 0a 2f 2a 20 47  --result 4../* G
6990: 72 6f 75 70 69 6e 67 20 69 73 20 70 65 72 66 6f  rouping is perfo
69a0: 72 6d 65 64 20 75 73 69 6e 67 20 74 68 65 20 42  rmed using the B
69b0: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20  INARY collating 
69c0: 73 65 71 75 65 6e 63 65 2e 20 20 27 61 62 63 27  sequence.  'abc'
69d0: 20 61 6e 64 0a 2a 2a 20 27 41 42 43 27 20 61 6e   and.** 'ABC' an
69e0: 64 20 27 41 62 63 27 20 66 6f 72 6d 20 64 69 66  d 'Abc' form dif
69f0: 66 65 72 65 6e 74 20 67 72 6f 75 70 73 20 2a 2f  ferent groups */
6a00: 0a 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  .SELECT count(*)
6a10: 20 46 52 4f 4d 20 74 31 20 47 52 4f 55 50 20 42   FROM t1 GROUP B
6a20: 59 20 28 64 20 7c 7c 20 27 27 29 20 4f 52 44 45  Y (d || '') ORDE
6a30: 52 20 42 59 20 31 3b 0a 2d 2d 72 65 73 75 6c 74  R BY 1;.--result
6a40: 20 31 20 31 20 32 0a 0a 2f 2a 20 53 6f 72 74 69   1 1 2../* Sorti
6a50: 6e 67 20 6f 72 20 63 6f 6c 75 6d 6e 20 63 20 69  ng or column c i
6a60: 73 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e  s performed usin
6a70: 67 20 74 68 65 20 52 54 52 49 4d 20 63 6f 6c 6c  g the RTRIM coll
6a80: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
6a90: 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  */.SELECT x FROM
6aa0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 63 2c 20   t1 ORDER BY c, 
6ab0: 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 34 20 31 20  x;.--result 4 1 
6ac0: 32 20 33 0a 0a 2f 2a 20 53 6f 72 74 69 6e 67 20  2 3../* Sorting 
6ad0: 6f 66 20 28 63 7c 7c 27 27 29 20 69 73 20 70 65  of (c||'') is pe
6ae0: 72 66 6f 72 6d 65 64 20 75 73 69 6e 67 20 74 68  rformed using th
6af0: 65 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  e BINARY collati
6b00: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f 0a  ng sequence. */.
6b10: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
6b20: 20 4f 52 44 45 52 20 42 59 20 28 63 7c 7c 27 27   ORDER BY (c||''
6b30: 29 2c 20 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 34  ), x;.--result 4
6b40: 20 32 20 33 20 31 0a 0a 2f 2a 20 53 6f 72 74 69   2 3 1../* Sorti
6b50: 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 20 63 20 69  ng of column c i
6b60: 73 20 70 65 72 66 6f 72 6d 65 64 20 75 73 69 6e  s performed usin
6b70: 67 20 74 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c  g the NOCASE col
6b80: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
6b90: 20 2a 2f 0a 53 45 4c 45 43 54 20 78 20 46 52 4f   */.SELECT x FRO
6ba0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 63 20  M t1 ORDER BY c 
6bb0: 43 4f 4c 4c 41 54 45 20 4e 4f 43 41 53 45 2c 20  COLLATE NOCASE, 
6bc0: 78 3b 0a 2d 2d 72 65 73 75 6c 74 20 32 20 34 20  x;.--result 2 4 
6bd0: 33 20 31 0a 3c 2f 70 72 65 3e 0a 3c 2f 62 6c 6f  3 1.</pre>.</blo
6be0: 63 6b 71 75 6f 74 65 3e 29 5e 0a                 ckquote>)^.