1--
2-- CHAR
3--
4-- fixed-length by value
5-- internally passed by value if <= 4 bytes in storage
6SELECT char 'c' = char 'c' AS true;
7 true
8------
9 t
10(1 row)
11
12--
13-- Build a table for testing
14--
15CREATE TABLE CHAR_TBL(f1 char);
16INSERT INTO CHAR_TBL (f1) VALUES ('a');
17INSERT INTO CHAR_TBL (f1) VALUES ('A');
18-- any of the following three input formats are acceptable
19INSERT INTO CHAR_TBL (f1) VALUES ('1');
20INSERT INTO CHAR_TBL (f1) VALUES (2);
21INSERT INTO CHAR_TBL (f1) VALUES ('3');
22-- zero-length char
23INSERT INTO CHAR_TBL (f1) VALUES ('');
24-- try char's of greater than 1 length
25INSERT INTO CHAR_TBL (f1) VALUES ('cd');
26ERROR:  value too long for type character(1)
27INSERT INTO CHAR_TBL (f1) VALUES ('c     ');
28SELECT '' AS seven, * FROM CHAR_TBL;
29 seven | f1
30-------+----
31       | a
32       | A
33       | 1
34       | 2
35       | 3
36       |
37       | c
38(7 rows)
39
40SELECT '' AS six, c.*
41   FROM CHAR_TBL c
42   WHERE c.f1 <> 'a';
43 six | f1
44-----+----
45     | A
46     | 1
47     | 2
48     | 3
49     |
50     | c
51(6 rows)
52
53SELECT '' AS one, c.*
54   FROM CHAR_TBL c
55   WHERE c.f1 = 'a';
56 one | f1
57-----+----
58     | a
59(1 row)
60
61SELECT '' AS five, c.*
62   FROM CHAR_TBL c
63   WHERE c.f1 < 'a';
64 five | f1
65------+----
66      | A
67      | 1
68      | 2
69      | 3
70      |
71(5 rows)
72
73SELECT '' AS six, c.*
74   FROM CHAR_TBL c
75   WHERE c.f1 <= 'a';
76 six | f1
77-----+----
78     | a
79     | A
80     | 1
81     | 2
82     | 3
83     |
84(6 rows)
85
86SELECT '' AS one, c.*
87   FROM CHAR_TBL c
88   WHERE c.f1 > 'a';
89 one | f1
90-----+----
91     | c
92(1 row)
93
94SELECT '' AS two, c.*
95   FROM CHAR_TBL c
96   WHERE c.f1 >= 'a';
97 two | f1
98-----+----
99     | a
100     | c
101(2 rows)
102
103DROP TABLE CHAR_TBL;
104--
105-- Now test longer arrays of char
106--
107CREATE TABLE CHAR_TBL(f1 char(4));
108INSERT INTO CHAR_TBL (f1) VALUES ('a');
109INSERT INTO CHAR_TBL (f1) VALUES ('ab');
110INSERT INTO CHAR_TBL (f1) VALUES ('abcd');
111INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
112ERROR:  value too long for type character(4)
113INSERT INTO CHAR_TBL (f1) VALUES ('abcd    ');
114SELECT '' AS four, * FROM CHAR_TBL;
115 four |  f1
116------+------
117      | a
118      | ab
119      | abcd
120      | abcd
121(4 rows)
122
123