4
SELECT text 'this is a text string' = text 'this is a text string' AS true;
10
SELECT text 'this is a text string' = text 'this is a text strin' AS false;
16
CREATE TABLE TEXT_TBL (f1 text);
17
INSERT INTO TEXT_TBL VALUES ('doh!');
18
INSERT INTO TEXT_TBL VALUES ('hi de ho neighbor');
19
SELECT '' AS two, * FROM TEXT_TBL;
21
-----+-------------------
26
-- As of 8.3 we have removed most implicit casts to text, so that for example
27
-- this no longer works:
29
ERROR: function length(integer) does not exist
30
LINE 1: select length(42);
32
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
33
-- But as a special exception for usability's sake, we still allow implicit
34
-- casting to text in concatenations, so long as the other input is text or
35
-- an unknown literal. So these work:
36
select 'four: '::text || 2+2;
42
select 'four: ' || 2+2;
50
ERROR: operator does not exist: integer || numeric
51
LINE 1: select 3 || 4.0;
53
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
55
* various string functions
63
select concat(1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
65
----------------------
69
select concat_ws('#','one');
75
select concat_ws('#',1,2,3,'hello',true, false, to_date('20100309','YYYYMMDD'));
77
----------------------------
78
1#2#3#hello#t#f#03-09-2010
81
select concat_ws(',',10,20,null,30);
87
select concat_ws('',10,20,null,30);
93
select concat_ws(NULL,10,20,null,30) is null;
99
select reverse('abcde');
105
select i, left('ahoj', i), right('ahoj', i) from generate_series(-5, 5) t(i) order by i;
121
select quote_literal('');
127
select quote_literal('abc''');
133
select quote_literal(e'\\');
139
-- check variadic labeled argument
140
select concat(variadic array[1,2,3]);
146
select concat_ws(',', variadic array[1,2,3]);
152
select concat_ws(',', variadic NULL);
158
select concat(variadic NULL) is NULL;
164
select concat(variadic '{}'::int[]) = '';
171
select concat_ws(',', variadic 10);
172
ERROR: VARIADIC argument must be an array
182
select format('Hello');
188
select format('Hello %s', 'World');
194
select format('Hello %%');
200
select format('Hello %%%%');
207
select format('Hello %s %s', 'World');
208
ERROR: too few arguments for format
209
select format('Hello %s');
210
ERROR: too few arguments for format
211
select format('Hello %x', 20);
212
ERROR: unrecognized conversion type specifier "x"
213
-- check literal and sql identifiers
214
select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, 'Hello');
216
----------------------------------------
217
INSERT INTO mytab VALUES('10','Hello')
220
select format('%s%s%s','Hello', NULL,'World');
226
select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', 10, NULL);
228
-------------------------------------
229
INSERT INTO mytab VALUES('10',NULL)
232
select format('INSERT INTO %I VALUES(%L,%L)', 'mytab', NULL, 'Hello');
234
----------------------------------------
235
INSERT INTO mytab VALUES(NULL,'Hello')
238
-- should fail, sql identifier cannot be NULL
239
select format('INSERT INTO %I VALUES(%L,%L)', NULL, 10, 'Hello');
240
ERROR: null values cannot be formatted as an SQL identifier
241
-- check positional placeholders
242
select format('%1$s %3$s', 1, 2, 3);
248
select format('%1$s %12$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
255
select format('%1$s %4$s', 1, 2, 3);
256
ERROR: too few arguments for format
257
select format('%1$s %13$s', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
258
ERROR: too few arguments for format
259
select format('%0$s', 'Hello');
260
ERROR: format specifies argument 0, but arguments are numbered from 1
261
select format('%*0$s', 'Hello');
262
ERROR: format specifies argument 0, but arguments are numbered from 1
263
select format('%1$', 1);
264
ERROR: unterminated format specifier
265
select format('%1$1', 1);
266
ERROR: unterminated format specifier
267
-- check mix of positional and ordered placeholders
268
select format('Hello %s %1$s %s', 'World', 'Hello again');
270
-------------------------------
271
Hello World World Hello again
274
select format('Hello %s %s, %2$s %2$s', 'World', 'Hello again');
276
--------------------------------------------------
277
Hello World Hello again, Hello again Hello again
280
-- check variadic labeled arguments
281
select format('%s, %s', variadic array['Hello','World']);
287
select format('%s, %s', variadic array[1, 2]);
293
select format('%s, %s', variadic array[true, false]);
299
select format('%s, %s', variadic array[true, false]::text[]);
305
-- check variadic with positional placeholders
306
select format('%2$s, %1$s', variadic array['first', 'second']);
312
select format('%2$s, %1$s', variadic array[1, 2]);
318
-- variadic argument can be NULL, but should not be referenced
319
select format('Hello', variadic NULL);
325
-- variadic argument allows simulating more than FUNC_MAX_ARGS parameters
326
select format(string_agg('%s',','), variadic array_agg(i))
327
from generate_series(1,200) g(i);
329
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
330
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200
333
-- check field widths and left, right alignment
334
select format('>>%10s<<', 'Hello');
340
select format('>>%10s<<', NULL);
346
select format('>>%10s<<', '');
352
select format('>>%-10s<<', '');
358
select format('>>%-10s<<', 'Hello');
364
select format('>>%-10s<<', NULL);
370
select format('>>%1$10s<<', 'Hello');
376
select format('>>%1$-10I<<', 'Hello');
382
select format('>>%2$*1$L<<', 10, 'Hello');
388
select format('>>%2$*1$L<<', 10, NULL);
394
select format('>>%2$*1$L<<', -10, NULL);
400
select format('>>%*s<<', 10, 'Hello');
406
select format('>>%*1$s<<', 10, 'Hello');
412
select format('>>%-s<<', 'Hello');
418
select format('>>%10L<<', NULL);
424
select format('>>%2$*1$L<<', NULL, 'Hello');
430
select format('>>%2$*1$L<<', 0, 'Hello');