]> begriffs open source - ai-pg/blob - full-docs/html/functions-string.html
Include links to all subsection html pages, with shorter paths too
[ai-pg] / full-docs / html / functions-string.html
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>9.4. String Functions and Operators</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="functions-math.html" title="9.3. Mathematical Functions and Operators" /><link rel="next" href="functions-binarystring.html" title="9.5. Binary String Functions and Operators" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">9.4. String Functions and Operators</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="functions-math.html" title="9.3. Mathematical Functions and Operators">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="functions.html" title="Chapter 9. Functions and Operators">Up</a></td><th width="60%" align="center">Chapter 9. Functions and Operators</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="functions-binarystring.html" title="9.5. Binary String Functions and Operators">Next</a></td></tr></table><hr /></div><div class="sect1" id="FUNCTIONS-STRING"><div class="titlepage"><div><div><h2 class="title" style="clear: both">9.4. String Functions and Operators <a href="#FUNCTIONS-STRING" class="id_link">#</a></h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="functions-string.html#FUNCTIONS-STRING-FORMAT">9.4.1. <code class="function">format</code></a></span></dt></dl></div><p>
3     This section describes functions and operators for examining and
4     manipulating string values.  Strings in this context include values
5     of the types <code class="type">character</code>, <code class="type">character varying</code>,
6     and <code class="type">text</code>.  Except where noted, these functions and operators
7     are declared to accept and return type <code class="type">text</code>.  They will
8     interchangeably accept <code class="type">character varying</code> arguments.
9     Values of type <code class="type">character</code> will be converted
10     to <code class="type">text</code> before the function or operator is applied, resulting
11     in stripping any trailing spaces in the <code class="type">character</code> value.
12    </p><p>
13     <acronym class="acronym">SQL</acronym> defines some string functions that use
14     key words, rather than commas, to separate
15     arguments.  Details are in
16     <a class="xref" href="functions-string.html#FUNCTIONS-STRING-SQL" title="Table 9.9. SQL String Functions and Operators">Table 9.9</a>.
17     <span class="productname">PostgreSQL</span> also provides versions of these functions
18     that use the regular function invocation syntax
19     (see <a class="xref" href="functions-string.html#FUNCTIONS-STRING-OTHER" title="Table 9.10. Other String Functions and Operators">Table 9.10</a>).
20    </p><div class="note"><h3 class="title">Note</h3><p>
21      The string concatenation operator (<code class="literal">||</code>) will accept
22      non-string input, so long as at least one input is of string type, as shown
23      in <a class="xref" href="functions-string.html#FUNCTIONS-STRING-SQL" title="Table 9.9. SQL String Functions and Operators">Table 9.9</a>.  For other cases, inserting an
24      explicit coercion to <code class="type">text</code> can be used to have non-string input
25      accepted.
26     </p></div><div class="table" id="FUNCTIONS-STRING-SQL"><p class="title"><strong>Table 9.9. <acronym class="acronym">SQL</acronym> String Functions and Operators</strong></p><div class="table-contents"><table class="table" summary="SQL String Functions and Operators" border="1"><colgroup><col /></colgroup><thead><tr><th class="func_table_entry"><p class="func_signature">
27         Function/Operator
28        </p>
29        <p>
30         Description
31        </p>
32        <p>
33         Example(s)
34        </p></th></tr></thead><tbody><tr><td class="func_table_entry"><p class="func_signature">
35         <a id="id-1.5.8.10.5.2.2.1.1.1.1" class="indexterm"></a>
36         <code class="type">text</code> <code class="literal">||</code> <code class="type">text</code>
37         → <code class="returnvalue">text</code>
38        </p>
39        <p>
40         Concatenates the two strings.
41        </p>
42        <p>
43         <code class="literal">'Post' || 'greSQL'</code>
44         → <code class="returnvalue">PostgreSQL</code>
45        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
46         <code class="type">text</code> <code class="literal">||</code> <code class="type">anynonarray</code>
47         → <code class="returnvalue">text</code>
48        </p>
49        <p class="func_signature">
50         <code class="type">anynonarray</code> <code class="literal">||</code> <code class="type">text</code>
51         → <code class="returnvalue">text</code>
52        </p>
53        <p>
54         Converts the non-string input to text, then concatenates the two
55         strings.  (The non-string input cannot be of an array type, because
56         that would create ambiguity with the array <code class="literal">||</code>
57         operators.  If you want to concatenate an array's text equivalent,
58         cast it to <code class="type">text</code> explicitly.)
59        </p>
60        <p>
61         <code class="literal">'Value: ' || 42</code>
62         → <code class="returnvalue">Value: 42</code>
63        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
64         <a id="id-1.5.8.10.5.2.2.3.1.1.1" class="indexterm"></a>
65         <code class="function">btrim</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>
66         [<span class="optional">, <em class="parameter"><code>characters</code></em> <code class="type">text</code> </span>] )
67         → <code class="returnvalue">text</code>
68        </p>
69        <p>
70         Removes the longest string containing only characters
71         in <em class="parameter"><code>characters</code></em> (a space by default)
72         from the start and end of <em class="parameter"><code>string</code></em>.
73        </p>
74        <p>
75         <code class="literal">btrim('xyxtrimyyx', 'xyz')</code>
76         → <code class="returnvalue">trim</code>
77        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
78         <a id="id-1.5.8.10.5.2.2.4.1.1.1" class="indexterm"></a>
79         <a id="id-1.5.8.10.5.2.2.4.1.1.2" class="indexterm"></a>
80          <code class="type">text</code> <code class="literal">IS</code> [<span class="optional"><code class="literal">NOT</code></span>] [<span class="optional"><em class="parameter"><code>form</code></em></span>] <code class="literal">NORMALIZED</code>
81         → <code class="returnvalue">boolean</code>
82        </p>
83        <p>
84         Checks whether the string is in the specified Unicode normalization
85         form.  The optional <em class="parameter"><code>form</code></em> key word specifies the
86         form: <code class="literal">NFC</code> (the default), <code class="literal">NFD</code>,
87         <code class="literal">NFKC</code>, or <code class="literal">NFKD</code>.  This expression can
88         only be used when the server encoding is <code class="literal">UTF8</code>.  Note
89         that checking for normalization using this expression is often faster
90         than normalizing possibly already normalized strings.
91        </p>
92        <p>
93         <code class="literal">U&amp;'\0061\0308bc' IS NFD NORMALIZED</code>
94         → <code class="returnvalue">t</code>
95        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
96         <a id="id-1.5.8.10.5.2.2.5.1.1.1" class="indexterm"></a>
97         <code class="function">bit_length</code> ( <code class="type">text</code> )
98         → <code class="returnvalue">integer</code>
99        </p>
100        <p>
101         Returns number of bits in the string (8
102         times the <code class="function">octet_length</code>).
103        </p>
104        <p>
105         <code class="literal">bit_length('jose')</code>
106         → <code class="returnvalue">32</code>
107        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
108         <a id="id-1.5.8.10.5.2.2.6.1.1.1" class="indexterm"></a>
109         <a id="id-1.5.8.10.5.2.2.6.1.1.2" class="indexterm"></a>
110         <a id="id-1.5.8.10.5.2.2.6.1.1.3" class="indexterm"></a>
111         <code class="function">char_length</code> ( <code class="type">text</code> )
112         → <code class="returnvalue">integer</code>
113        </p>
114        <p class="func_signature">
115         <a id="id-1.5.8.10.5.2.2.6.1.2.1" class="indexterm"></a>
116         <code class="function">character_length</code> ( <code class="type">text</code> )
117         → <code class="returnvalue">integer</code>
118        </p>
119        <p>
120         Returns number of characters in the string.
121        </p>
122        <p>
123         <code class="literal">char_length('josé')</code>
124         → <code class="returnvalue">4</code>
125        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
126         <a id="FUNCTION-LOWER" class="indexterm"></a>
127         <code class="function">lower</code> ( <code class="type">text</code> )
128         → <code class="returnvalue">text</code>
129        </p>
130        <p>
131         Converts the string to all lower case, according to the rules of the
132         database's locale.
133        </p>
134        <p>
135         <code class="literal">lower('TOM')</code>
136         → <code class="returnvalue">tom</code>
137        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
138         <a id="id-1.5.8.10.5.2.2.8.1.1.1" class="indexterm"></a>
139         <code class="function">lpad</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
140         <em class="parameter"><code>length</code></em> <code class="type">integer</code>
141         [<span class="optional">, <em class="parameter"><code>fill</code></em> <code class="type">text</code> </span>] )
142         → <code class="returnvalue">text</code>
143        </p>
144        <p>
145         Extends the <em class="parameter"><code>string</code></em> to length
146         <em class="parameter"><code>length</code></em> by prepending the characters
147         <em class="parameter"><code>fill</code></em> (a space by default).  If the
148         <em class="parameter"><code>string</code></em> is already longer than
149         <em class="parameter"><code>length</code></em> then it is truncated (on the right).
150        </p>
151        <p>
152         <code class="literal">lpad('hi', 5, 'xy')</code>
153         → <code class="returnvalue">xyxhi</code>
154        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
155         <a id="id-1.5.8.10.5.2.2.9.1.1.1" class="indexterm"></a>
156         <code class="function">ltrim</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>
157         [<span class="optional">, <em class="parameter"><code>characters</code></em> <code class="type">text</code> </span>] )
158         → <code class="returnvalue">text</code>
159        </p>
160        <p>
161         Removes the longest string containing only characters in
162         <em class="parameter"><code>characters</code></em> (a space by default) from the start of
163         <em class="parameter"><code>string</code></em>.
164        </p>
165        <p>
166         <code class="literal">ltrim('zzzytest', 'xyz')</code>
167         → <code class="returnvalue">test</code>
168        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
169         <a id="FUNCTION-NORMALIZE" class="indexterm"></a>
170         <a id="id-1.5.8.10.5.2.2.10.1.1.2" class="indexterm"></a>
171         <code class="function">normalize</code> ( <code class="type">text</code>
172         [<span class="optional">, <em class="parameter"><code>form</code></em> </span>] )
173         → <code class="returnvalue">text</code>
174        </p>
175        <p>
176         Converts the string to the specified Unicode
177         normalization form.  The optional <em class="parameter"><code>form</code></em> key word
178         specifies the form: <code class="literal">NFC</code> (the default),
179         <code class="literal">NFD</code>, <code class="literal">NFKC</code>, or
180         <code class="literal">NFKD</code>.  This function can only be used when the
181         server encoding is <code class="literal">UTF8</code>.
182        </p>
183        <p>
184         <code class="literal">normalize(U&amp;'\0061\0308bc', NFC)</code>
185         → <code class="returnvalue">U&amp;'\00E4bc'</code>
186        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
187         <a id="id-1.5.8.10.5.2.2.11.1.1.1" class="indexterm"></a>
188         <code class="function">octet_length</code> ( <code class="type">text</code> )
189         → <code class="returnvalue">integer</code>
190        </p>
191        <p>
192         Returns number of bytes in the string.
193        </p>
194        <p>
195         <code class="literal">octet_length('josé')</code>
196         → <code class="returnvalue">5</code> (if server encoding is UTF8)
197        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
198         <a id="id-1.5.8.10.5.2.2.12.1.1.1" class="indexterm"></a>
199         <code class="function">octet_length</code> ( <code class="type">character</code> )
200         → <code class="returnvalue">integer</code>
201        </p>
202        <p>
203         Returns number of bytes in the string.  Since this version of the
204         function accepts type <code class="type">character</code> directly, it will not
205         strip trailing spaces.
206        </p>
207        <p>
208         <code class="literal">octet_length('abc '::character(4))</code>
209         → <code class="returnvalue">4</code>
210        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
211         <a id="id-1.5.8.10.5.2.2.13.1.1.1" class="indexterm"></a>
212         <code class="function">overlay</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> <code class="literal">PLACING</code> <em class="parameter"><code>newsubstring</code></em> <code class="type">text</code> <code class="literal">FROM</code> <em class="parameter"><code>start</code></em> <code class="type">integer</code> [<span class="optional"> <code class="literal">FOR</code> <em class="parameter"><code>count</code></em> <code class="type">integer</code> </span>] )
213         → <code class="returnvalue">text</code>
214        </p>
215        <p>
216         Replaces the substring of <em class="parameter"><code>string</code></em> that starts at
217         the <em class="parameter"><code>start</code></em>'th character and extends
218         for <em class="parameter"><code>count</code></em> characters
219         with <em class="parameter"><code>newsubstring</code></em>.
220         If <em class="parameter"><code>count</code></em> is omitted, it defaults to the length
221         of <em class="parameter"><code>newsubstring</code></em>.
222        </p>
223        <p>
224         <code class="literal">overlay('Txxxxas' placing 'hom' from 2 for 4)</code>
225         → <code class="returnvalue">Thomas</code>
226        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
227         <a id="id-1.5.8.10.5.2.2.14.1.1.1" class="indexterm"></a>
228         <code class="function">position</code> ( <em class="parameter"><code>substring</code></em> <code class="type">text</code> <code class="literal">IN</code> <em class="parameter"><code>string</code></em> <code class="type">text</code> )
229         → <code class="returnvalue">integer</code>
230        </p>
231        <p>
232         Returns first starting index of the specified
233         <em class="parameter"><code>substring</code></em> within
234         <em class="parameter"><code>string</code></em>, or zero if it's not present.
235        </p>
236        <p>
237         <code class="literal">position('om' in 'Thomas')</code>
238         → <code class="returnvalue">3</code>
239        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
240         <a id="id-1.5.8.10.5.2.2.15.1.1.1" class="indexterm"></a>
241         <code class="function">rpad</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
242         <em class="parameter"><code>length</code></em> <code class="type">integer</code>
243         [<span class="optional">, <em class="parameter"><code>fill</code></em> <code class="type">text</code> </span>] )
244         → <code class="returnvalue">text</code>
245        </p>
246        <p>
247         Extends the <em class="parameter"><code>string</code></em> to length
248         <em class="parameter"><code>length</code></em> by appending the characters
249         <em class="parameter"><code>fill</code></em> (a space by default).  If the
250         <em class="parameter"><code>string</code></em> is already longer than
251         <em class="parameter"><code>length</code></em> then it is truncated.
252        </p>
253        <p>
254         <code class="literal">rpad('hi', 5, 'xy')</code>
255         → <code class="returnvalue">hixyx</code>
256        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
257         <a id="id-1.5.8.10.5.2.2.16.1.1.1" class="indexterm"></a>
258         <code class="function">rtrim</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>
259          [<span class="optional">, <em class="parameter"><code>characters</code></em> <code class="type">text</code> </span>] )
260         → <code class="returnvalue">text</code>
261        </p>
262        <p>
263         Removes the longest string containing only characters in
264         <em class="parameter"><code>characters</code></em> (a space by default) from the end of
265         <em class="parameter"><code>string</code></em>.
266        </p>
267        <p>
268         <code class="literal">rtrim('testxxzx', 'xyz')</code>
269         → <code class="returnvalue">test</code>
270        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
271         <a id="id-1.5.8.10.5.2.2.17.1.1.1" class="indexterm"></a>
272         <code class="function">substring</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> [<span class="optional"> <code class="literal">FROM</code> <em class="parameter"><code>start</code></em> <code class="type">integer</code> </span>] [<span class="optional"> <code class="literal">FOR</code> <em class="parameter"><code>count</code></em> <code class="type">integer</code> </span>] )
273         → <code class="returnvalue">text</code>
274        </p>
275        <p>
276         Extracts the substring of <em class="parameter"><code>string</code></em> starting at
277         the <em class="parameter"><code>start</code></em>'th character if that is specified,
278         and stopping after <em class="parameter"><code>count</code></em> characters if that is
279         specified.  Provide at least one of <em class="parameter"><code>start</code></em>
280         and <em class="parameter"><code>count</code></em>.
281        </p>
282        <p>
283         <code class="literal">substring('Thomas' from 2 for 3)</code>
284         → <code class="returnvalue">hom</code>
285        </p>
286        <p>
287         <code class="literal">substring('Thomas' from 3)</code>
288         → <code class="returnvalue">omas</code>
289        </p>
290        <p>
291         <code class="literal">substring('Thomas' for 2)</code>
292         → <code class="returnvalue">Th</code>
293        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
294         <code class="function">substring</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> <code class="literal">FROM</code> <em class="parameter"><code>pattern</code></em> <code class="type">text</code> )
295         → <code class="returnvalue">text</code>
296        </p>
297        <p>
298         Extracts the first substring matching POSIX regular expression; see
299         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
300        </p>
301        <p>
302         <code class="literal">substring('Thomas' from '...$')</code>
303         → <code class="returnvalue">mas</code>
304        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
305         <code class="function">substring</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> <code class="literal">SIMILAR</code> <em class="parameter"><code>pattern</code></em> <code class="type">text</code> <code class="literal">ESCAPE</code> <em class="parameter"><code>escape</code></em> <code class="type">text</code> )
306         → <code class="returnvalue">text</code>
307        </p>
308        <p class="func_signature">
309         <code class="function">substring</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> <code class="literal">FROM</code> <em class="parameter"><code>pattern</code></em> <code class="type">text</code> <code class="literal">FOR</code> <em class="parameter"><code>escape</code></em> <code class="type">text</code> )
310         → <code class="returnvalue">text</code>
311        </p>
312        <p>
313         Extracts the first substring matching <acronym class="acronym">SQL</acronym> regular expression;
314         see <a class="xref" href="functions-matching.html#FUNCTIONS-SIMILARTO-REGEXP" title="9.7.2. SIMILAR TO Regular Expressions">Section 9.7.2</a>.  The first form has
315         been specified since SQL:2003; the second form was only in SQL:1999
316         and should be considered obsolete.
317        </p>
318        <p>
319         <code class="literal">substring('Thomas' similar '%#"o_a#"_' escape '#')</code>
320         → <code class="returnvalue">oma</code>
321        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
322         <a id="id-1.5.8.10.5.2.2.20.1.1.1" class="indexterm"></a>
323         <code class="function">trim</code> ( [<span class="optional"> <code class="literal">LEADING</code> | <code class="literal">TRAILING</code> | <code class="literal">BOTH</code> </span>]
324         [<span class="optional"> <em class="parameter"><code>characters</code></em> <code class="type">text</code> </span>] <code class="literal">FROM</code>
325         <em class="parameter"><code>string</code></em> <code class="type">text</code> )
326         → <code class="returnvalue">text</code>
327        </p>
328        <p>
329         Removes the longest string containing only characters in
330         <em class="parameter"><code>characters</code></em> (a space by default) from the
331         start, end, or both ends (<code class="literal">BOTH</code> is the default)
332         of <em class="parameter"><code>string</code></em>.
333        </p>
334        <p>
335         <code class="literal">trim(both 'xyz' from 'yxTomxx')</code>
336         → <code class="returnvalue">Tom</code>
337        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
338         <code class="function">trim</code> ( [<span class="optional"> <code class="literal">LEADING</code> | <code class="literal">TRAILING</code> | <code class="literal">BOTH</code> </span>] [<span class="optional"> <code class="literal">FROM</code> </span>]
339         <em class="parameter"><code>string</code></em> <code class="type">text</code> [<span class="optional">,
340         <em class="parameter"><code>characters</code></em> <code class="type">text</code> </span>] )
341         → <code class="returnvalue">text</code>
342        </p>
343        <p>
344         This is a non-standard syntax for <code class="function">trim()</code>.
345        </p>
346        <p>
347         <code class="literal">trim(both from 'yxTomxx', 'xyz')</code>
348         → <code class="returnvalue">Tom</code>
349        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
350         <a id="id-1.5.8.10.5.2.2.22.1.1.1" class="indexterm"></a>
351         <code class="function">unicode_assigned</code> ( <code class="type">text</code> )
352         → <code class="returnvalue">boolean</code>
353        </p>
354        <p>
355         Returns <code class="literal">true</code> if all characters in the string are
356         assigned Unicode codepoints; <code class="literal">false</code> otherwise. This
357         function can only be used when the server encoding is
358         <code class="literal">UTF8</code>.
359        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
360         <a id="id-1.5.8.10.5.2.2.23.1.1.1" class="indexterm"></a>
361         <code class="function">upper</code> ( <code class="type">text</code> )
362         → <code class="returnvalue">text</code>
363        </p>
364        <p>
365         Converts the string to all upper case, according to the rules of the
366         database's locale.
367        </p>
368        <p>
369         <code class="literal">upper('tom')</code>
370         → <code class="returnvalue">TOM</code>
371        </p></td></tr></tbody></table></div></div><br class="table-break" /><p>
372     Additional string manipulation functions and operators are available
373     and are listed in <a class="xref" href="functions-string.html#FUNCTIONS-STRING-OTHER" title="Table 9.10. Other String Functions and Operators">Table 9.10</a>.  (Some of
374     these are used internally to implement
375     the <acronym class="acronym">SQL</acronym>-standard string functions listed in
376     <a class="xref" href="functions-string.html#FUNCTIONS-STRING-SQL" title="Table 9.9. SQL String Functions and Operators">Table 9.9</a>.)
377     There are also pattern-matching operators, which are described in
378     <a class="xref" href="functions-matching.html" title="9.7. Pattern Matching">Section 9.7</a>, and operators for full-text
379     search, which are described in <a class="xref" href="textsearch.html" title="Chapter 12. Full Text Search">Chapter 12</a>.
380    </p><div class="table" id="FUNCTIONS-STRING-OTHER"><p class="title"><strong>Table 9.10. Other String Functions and Operators</strong></p><div class="table-contents"><table class="table" summary="Other String Functions and Operators" border="1"><colgroup><col /></colgroup><thead><tr><th class="func_table_entry"><p class="func_signature">
381         Function/Operator
382        </p>
383        <p>
384         Description
385        </p>
386        <p>
387         Example(s)
388        </p></th></tr></thead><tbody><tr><td class="func_table_entry"><p class="func_signature">
389         <a id="id-1.5.8.10.7.2.2.1.1.1.1" class="indexterm"></a>
390         <code class="type">text</code> <code class="literal">^@</code> <code class="type">text</code>
391         → <code class="returnvalue">boolean</code>
392        </p>
393        <p>
394         Returns true if the first string starts with the second string
395         (equivalent to the <code class="function">starts_with()</code> function).
396        </p>
397        <p>
398         <code class="literal">'alphabet' ^@ 'alph'</code>
399         → <code class="returnvalue">t</code>
400        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
401         <a id="id-1.5.8.10.7.2.2.2.1.1.1" class="indexterm"></a>
402         <code class="function">ascii</code> ( <code class="type">text</code> )
403         → <code class="returnvalue">integer</code>
404        </p>
405        <p>
406         Returns the numeric code of the first character of the argument.
407         In <acronym class="acronym">UTF8</acronym> encoding, returns the Unicode code point
408         of the character.  In other multibyte encodings, the argument must
409         be an <acronym class="acronym">ASCII</acronym> character.
410        </p>
411        <p>
412         <code class="literal">ascii('x')</code>
413         → <code class="returnvalue">120</code>
414        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
415         <a id="id-1.5.8.10.7.2.2.3.1.1.1" class="indexterm"></a>
416         <code class="function">chr</code> ( <code class="type">integer</code> )
417         → <code class="returnvalue">text</code>
418        </p>
419        <p>
420         Returns the character with the given code. In <acronym class="acronym">UTF8</acronym>
421         encoding the argument is treated as a Unicode code point. In other
422         multibyte encodings the argument must designate
423         an <acronym class="acronym">ASCII</acronym> character.  <code class="literal">chr(0)</code> is
424         disallowed because text data types cannot store that character.
425       </p>
426       <p>
427         <code class="literal">chr(65)</code>
428         → <code class="returnvalue">A</code>
429        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
430         <a id="id-1.5.8.10.7.2.2.4.1.1.1" class="indexterm"></a>
431         <code class="function">concat</code> ( <em class="parameter"><code>val1</code></em> <code class="type">"any"</code>
432          [<span class="optional">, <em class="parameter"><code>val2</code></em> <code class="type">"any"</code> [<span class="optional">, ...</span>] </span>] )
433         → <code class="returnvalue">text</code>
434        </p>
435        <p>
436         Concatenates the text representations of all the arguments.
437         NULL arguments are ignored.
438        </p>
439        <p>
440         <code class="literal">concat('abcde', 2, NULL, 22)</code>
441         → <code class="returnvalue">abcde222</code>
442        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
443         <a id="id-1.5.8.10.7.2.2.5.1.1.1" class="indexterm"></a>
444         <code class="function">concat_ws</code> ( <em class="parameter"><code>sep</code></em> <code class="type">text</code>,
445         <em class="parameter"><code>val1</code></em> <code class="type">"any"</code>
446         [<span class="optional">, <em class="parameter"><code>val2</code></em> <code class="type">"any"</code> [<span class="optional">, ...</span>] </span>] )
447         → <code class="returnvalue">text</code>
448        </p>
449        <p>
450         Concatenates all but the first argument, with separators. The first
451         argument is used as the separator string, and should not be NULL.
452         Other NULL arguments are ignored.
453        </p>
454        <p>
455         <code class="literal">concat_ws(',', 'abcde', 2, NULL, 22)</code>
456         → <code class="returnvalue">abcde,2,22</code>
457        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
458         <a id="id-1.5.8.10.7.2.2.6.1.1.1" class="indexterm"></a>
459         <code class="function">format</code> ( <em class="parameter"><code>formatstr</code></em> <code class="type">text</code>
460         [<span class="optional">, <em class="parameter"><code>formatarg</code></em> <code class="type">"any"</code> [<span class="optional">, ...</span>] </span>] )
461         → <code class="returnvalue">text</code>
462        </p>
463        <p>
464          Formats arguments according to a format string;
465          see <a class="xref" href="functions-string.html#FUNCTIONS-STRING-FORMAT" title="9.4.1. format">Section 9.4.1</a>.
466          This function is similar to the C function <code class="function">sprintf</code>.
467        </p>
468        <p>
469         <code class="literal">format('Hello %s, %1$s', 'World')</code>
470         → <code class="returnvalue">Hello World, World</code>
471        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
472         <a id="id-1.5.8.10.7.2.2.7.1.1.1" class="indexterm"></a>
473         <code class="function">initcap</code> ( <code class="type">text</code> )
474         → <code class="returnvalue">text</code>
475        </p>
476        <p>
477         Converts the first letter of each word to upper case and the
478         rest to lower case. Words are sequences of alphanumeric
479         characters separated by non-alphanumeric characters.
480        </p>
481        <p>
482         <code class="literal">initcap('hi THOMAS')</code>
483         → <code class="returnvalue">Hi Thomas</code>
484        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
485         <a id="id-1.5.8.10.7.2.2.8.1.1.1" class="indexterm"></a>
486         <code class="function">casefold</code> ( <code class="type">text</code> )
487         → <code class="returnvalue">text</code>
488        </p>
489        <p>
490         Performs case folding of the input string according to the collation.
491         Case folding is similar to case conversion, but the purpose of case
492         folding is to facilitate case-insensitive matching of strings,
493         whereas the purpose of case conversion is to convert to a particular
494         cased form.  This function can only be used when the server encoding
495         is <code class="literal">UTF8</code>.
496        </p>
497        <p>
498         Ordinarily, case folding simply converts to lowercase, but there may
499         be exceptions depending on the collation.  For instance, some
500         characters have more than two lowercase variants, or fold to uppercase.
501        </p>
502        <p>
503         Case folding may change the length of the string.  For instance, in
504         the <code class="literal">PG_UNICODE_FAST</code> collation, <code class="literal">ß</code>
505         (U+00DF) folds to <code class="literal">ss</code>.
506        </p>
507        <p>
508         <code class="function">casefold</code> can be used for Unicode Default Caseless
509         Matching.  It does not always preserve the normalized form of the
510         input string (see <a class="xref" href="functions-string.html#FUNCTION-NORMALIZE">normalize</a>).
511        </p>
512        <p>
513         The <code class="literal">libc</code> provider doesn't support case folding, so
514         <code class="function">casefold</code> is identical to <a class="xref" href="functions-string.html#FUNCTION-LOWER">lower</a>.
515        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
516         <a id="id-1.5.8.10.7.2.2.9.1.1.1" class="indexterm"></a>
517         <code class="function">left</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
518         <em class="parameter"><code>n</code></em> <code class="type">integer</code> )
519         → <code class="returnvalue">text</code>
520        </p>
521        <p>
522         Returns first <em class="parameter"><code>n</code></em> characters in the
523         string, or when <em class="parameter"><code>n</code></em> is negative, returns
524         all but last |<em class="parameter"><code>n</code></em>| characters.
525        </p>
526        <p>
527         <code class="literal">left('abcde', 2)</code>
528         → <code class="returnvalue">ab</code>
529        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
530         <a id="id-1.5.8.10.7.2.2.10.1.1.1" class="indexterm"></a>
531         <code class="function">length</code> ( <code class="type">text</code> )
532         → <code class="returnvalue">integer</code>
533        </p>
534        <p>
535         Returns the number of characters in the string.
536        </p>
537        <p>
538         <code class="literal">length('jose')</code>
539         → <code class="returnvalue">4</code>
540        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
541         <a id="id-1.5.8.10.7.2.2.11.1.1.1" class="indexterm"></a>
542         <code class="function">md5</code> ( <code class="type">text</code> )
543         → <code class="returnvalue">text</code>
544        </p>
545        <p>
546         Computes the MD5 <a class="link" href="functions-binarystring.html#FUNCTIONS-HASH-NOTE">hash</a> of
547         the argument, with the result written in hexadecimal.
548        </p>
549        <p>
550         <code class="literal">md5('abc')</code>
551         → <code class="returnvalue">900150983cd24fb0​d6963f7d28e17f72</code>
552        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
553         <a id="id-1.5.8.10.7.2.2.12.1.1.1" class="indexterm"></a>
554         <code class="function">parse_ident</code> ( <em class="parameter"><code>qualified_identifier</code></em> <code class="type">text</code>
555         [<span class="optional">, <em class="parameter"><code>strict_mode</code></em> <code class="type">boolean</code> <code class="literal">DEFAULT</code> <code class="literal">true</code> </span>] )
556         → <code class="returnvalue">text[]</code>
557        </p>
558        <p>
559         Splits <em class="parameter"><code>qualified_identifier</code></em> into an array of
560         identifiers, removing any quoting of individual identifiers.  By
561         default, extra characters after the last identifier are considered an
562         error; but if the second parameter is <code class="literal">false</code>, then such
563         extra characters are ignored. (This behavior is useful for parsing
564         names for objects like functions.) Note that this function does not
565         truncate over-length identifiers. If you want truncation you can cast
566         the result to <code class="type">name[]</code>.
567        </p>
568        <p>
569         <code class="literal">parse_ident('"SomeSchema".someTable')</code>
570         → <code class="returnvalue">{SomeSchema,sometable}</code>
571        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
572         <a id="id-1.5.8.10.7.2.2.13.1.1.1" class="indexterm"></a>
573         <code class="function">pg_client_encoding</code> ( )
574         → <code class="returnvalue">name</code>
575        </p>
576        <p>
577         Returns current client encoding name.
578        </p>
579        <p>
580         <code class="literal">pg_client_encoding()</code>
581         → <code class="returnvalue">UTF8</code>
582        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
583         <a id="id-1.5.8.10.7.2.2.14.1.1.1" class="indexterm"></a>
584         <code class="function">quote_ident</code> ( <code class="type">text</code> )
585         → <code class="returnvalue">text</code>
586        </p>
587        <p>
588         Returns the given string suitably quoted to be used as an identifier
589         in an <acronym class="acronym">SQL</acronym> statement string.
590         Quotes are added only if necessary (i.e., if the string contains
591         non-identifier characters or would be case-folded).
592         Embedded quotes are properly doubled.
593         See also <a class="xref" href="plpgsql-statements.html#PLPGSQL-QUOTE-LITERAL-EXAMPLE" title="Example 41.1. Quoting Values in Dynamic Queries">Example 41.1</a>.
594        </p>
595        <p>
596         <code class="literal">quote_ident('Foo bar')</code>
597         → <code class="returnvalue">"Foo bar"</code>
598        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
599         <a id="id-1.5.8.10.7.2.2.15.1.1.1" class="indexterm"></a>
600         <code class="function">quote_literal</code> ( <code class="type">text</code> )
601         → <code class="returnvalue">text</code>
602        </p>
603        <p>
604         Returns the given string suitably quoted to be used as a string literal
605         in an <acronym class="acronym">SQL</acronym> statement string.
606         Embedded single-quotes and backslashes are properly doubled.
607         Note that <code class="function">quote_literal</code> returns null on null
608         input; if the argument might be null,
609         <code class="function">quote_nullable</code> is often more suitable.
610         See also <a class="xref" href="plpgsql-statements.html#PLPGSQL-QUOTE-LITERAL-EXAMPLE" title="Example 41.1. Quoting Values in Dynamic Queries">Example 41.1</a>.
611        </p>
612        <p>
613         <code class="literal">quote_literal(E'O\'Reilly')</code>
614         → <code class="returnvalue">'O''Reilly'</code>
615        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
616         <code class="function">quote_literal</code> ( <code class="type">anyelement</code> )
617         → <code class="returnvalue">text</code>
618        </p>
619        <p>
620         Converts the given value to text and then quotes it as a literal.
621         Embedded single-quotes and backslashes are properly doubled.
622        </p>
623        <p>
624         <code class="literal">quote_literal(42.5)</code>
625         → <code class="returnvalue">'42.5'</code>
626        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
627         <a id="id-1.5.8.10.7.2.2.17.1.1.1" class="indexterm"></a>
628         <code class="function">quote_nullable</code> ( <code class="type">text</code> )
629         → <code class="returnvalue">text</code>
630        </p>
631        <p>
632         Returns the given string suitably quoted to be used as a string literal
633         in an <acronym class="acronym">SQL</acronym> statement string; or, if the argument
634         is null, returns <code class="literal">NULL</code>.
635         Embedded single-quotes and backslashes are properly doubled.
636         See also <a class="xref" href="plpgsql-statements.html#PLPGSQL-QUOTE-LITERAL-EXAMPLE" title="Example 41.1. Quoting Values in Dynamic Queries">Example 41.1</a>.
637        </p>
638        <p>
639         <code class="literal">quote_nullable(NULL)</code>
640         → <code class="returnvalue">NULL</code>
641        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
642         <code class="function">quote_nullable</code> ( <code class="type">anyelement</code> )
643         → <code class="returnvalue">text</code>
644        </p>
645        <p>
646         Converts the given value to text and then quotes it as a literal;
647         or, if the argument is null, returns <code class="literal">NULL</code>.
648         Embedded single-quotes and backslashes are properly doubled.
649        </p>
650        <p>
651         <code class="literal">quote_nullable(42.5)</code>
652         → <code class="returnvalue">'42.5'</code>
653        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
654         <a id="id-1.5.8.10.7.2.2.19.1.1.1" class="indexterm"></a>
655         <code class="function">regexp_count</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>
656          [<span class="optional">, <em class="parameter"><code>start</code></em> <code class="type">integer</code>
657          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] </span>] )
658         → <code class="returnvalue">integer</code>
659        </p>
660        <p>
661         Returns the number of times the POSIX regular
662         expression <em class="parameter"><code>pattern</code></em> matches in
663         the <em class="parameter"><code>string</code></em>; see
664         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
665        </p>
666        <p>
667         <code class="literal">regexp_count('123456789012', '\d\d\d', 2)</code>
668         → <code class="returnvalue">3</code>
669        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
670         <a id="id-1.5.8.10.7.2.2.20.1.1.1" class="indexterm"></a>
671         <code class="function">regexp_instr</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>
672          [<span class="optional">, <em class="parameter"><code>start</code></em> <code class="type">integer</code>
673          [<span class="optional">, <em class="parameter"><code>N</code></em> <code class="type">integer</code>
674          [<span class="optional">, <em class="parameter"><code>endoption</code></em> <code class="type">integer</code>
675          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code>
676          [<span class="optional">, <em class="parameter"><code>subexpr</code></em> <code class="type">integer</code> </span>] </span>] </span>] </span>] </span>] )
677         → <code class="returnvalue">integer</code>
678        </p>
679        <p>
680         Returns the position within <em class="parameter"><code>string</code></em> where
681         the <em class="parameter"><code>N</code></em>'th match of the POSIX regular
682         expression <em class="parameter"><code>pattern</code></em> occurs, or zero if there is
683         no such match; see <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
684        </p>
685        <p>
686         <code class="literal">regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i')</code>
687         → <code class="returnvalue">3</code>
688        </p>
689        <p>
690         <code class="literal">regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i', 2)</code>
691         → <code class="returnvalue">5</code>
692        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
693         <a id="id-1.5.8.10.7.2.2.21.1.1.1" class="indexterm"></a>
694         <code class="function">regexp_like</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>
695          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
696         → <code class="returnvalue">boolean</code>
697        </p>
698        <p>
699         Checks whether a match of the POSIX regular
700         expression <em class="parameter"><code>pattern</code></em> occurs
701         within <em class="parameter"><code>string</code></em>; see
702         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
703        </p>
704        <p>
705         <code class="literal">regexp_like('Hello World', 'world$', 'i')</code>
706         → <code class="returnvalue">t</code>
707        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
708         <a id="id-1.5.8.10.7.2.2.22.1.1.1" class="indexterm"></a>
709         <code class="function">regexp_match</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
710         → <code class="returnvalue">text[]</code>
711        </p>
712        <p>
713         Returns substrings within the first match of the POSIX regular
714         expression <em class="parameter"><code>pattern</code></em> to
715         the <em class="parameter"><code>string</code></em>; see
716         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
717        </p>
718        <p>
719         <code class="literal">regexp_match('foobarbequebaz', '(bar)(beque)')</code>
720         → <code class="returnvalue">{bar,beque}</code>
721        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
722         <a id="id-1.5.8.10.7.2.2.23.1.1.1" class="indexterm"></a>
723         <code class="function">regexp_matches</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
724         → <code class="returnvalue">setof text[]</code>
725        </p>
726        <p>
727         Returns substrings within the first match of the POSIX regular
728         expression <em class="parameter"><code>pattern</code></em> to
729         the <em class="parameter"><code>string</code></em>, or substrings within all
730         such matches if the <code class="literal">g</code> flag is used;
731         see <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
732        </p>
733        <p>
734         <code class="literal">regexp_matches('foobarbequebaz', 'ba.', 'g')</code>
735         → <code class="returnvalue"></code>
736 </p><pre class="programlisting">
737  {bar}
738  {baz}
739 </pre><p>
740        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
741         <a id="id-1.5.8.10.7.2.2.24.1.1.1" class="indexterm"></a>
742         <code class="function">regexp_replace</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>, <em class="parameter"><code>replacement</code></em> <code class="type">text</code>
743          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
744         → <code class="returnvalue">text</code>
745        </p>
746        <p>
747         Replaces the substring that is the first match to the POSIX
748         regular expression <em class="parameter"><code>pattern</code></em>, or all such
749         matches if the <code class="literal">g</code> flag is used; see
750         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
751        </p>
752        <p>
753         <code class="literal">regexp_replace('Thomas', '.[mN]a.', 'M')</code>
754         → <code class="returnvalue">ThM</code>
755        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
756         <code class="function">regexp_replace</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>, <em class="parameter"><code>replacement</code></em> <code class="type">text</code>,
757          <em class="parameter"><code>start</code></em> <code class="type">integer</code>
758          [<span class="optional">, <em class="parameter"><code>N</code></em> <code class="type">integer</code>
759          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] </span>] )
760         → <code class="returnvalue">text</code>
761        </p>
762        <p>
763         Replaces the substring that is the <em class="parameter"><code>N</code></em>'th
764         match to the POSIX regular expression <em class="parameter"><code>pattern</code></em>,
765         or all such matches if <em class="parameter"><code>N</code></em> is zero, with the
766         search beginning at the <em class="parameter"><code>start</code></em>'th character
767         of <em class="parameter"><code>string</code></em>.  If <em class="parameter"><code>N</code></em> is
768         omitted, it defaults to 1.  See
769         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
770        </p>
771        <p>
772         <code class="literal">regexp_replace('Thomas', '.', 'X', 3, 2)</code>
773         → <code class="returnvalue">ThoXas</code>
774        </p>
775        <p>
776         <code class="literal">regexp_replace(string=&gt;'hello world', pattern=&gt;'l', replacement=&gt;'XX', start=&gt;1, "N"=&gt;2)</code>
777         → <code class="returnvalue">helXXo world</code>
778        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
779         <a id="id-1.5.8.10.7.2.2.26.1.1.1" class="indexterm"></a>
780         <code class="function">regexp_split_to_array</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
781         → <code class="returnvalue">text[]</code>
782        </p>
783        <p>
784         Splits <em class="parameter"><code>string</code></em> using a POSIX regular
785         expression as the delimiter, producing an array of results; see
786         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
787        </p>
788        <p>
789         <code class="literal">regexp_split_to_array('hello world', '\s+')</code>
790         → <code class="returnvalue">{hello,world}</code>
791        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
792         <a id="id-1.5.8.10.7.2.2.27.1.1.1" class="indexterm"></a>
793         <code class="function">regexp_split_to_table</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code> </span>] )
794         → <code class="returnvalue">setof text</code>
795        </p>
796        <p>
797         Splits <em class="parameter"><code>string</code></em> using a POSIX regular
798         expression as the delimiter, producing a set of results; see
799         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
800        </p>
801        <p>
802         <code class="literal">regexp_split_to_table('hello world', '\s+')</code>
803         → <code class="returnvalue"></code>
804 </p><pre class="programlisting">
805  hello
806  world
807 </pre><p>
808        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
809         <a id="id-1.5.8.10.7.2.2.28.1.1.1" class="indexterm"></a>
810         <code class="function">regexp_substr</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>pattern</code></em> <code class="type">text</code>
811          [<span class="optional">, <em class="parameter"><code>start</code></em> <code class="type">integer</code>
812          [<span class="optional">, <em class="parameter"><code>N</code></em> <code class="type">integer</code>
813          [<span class="optional">, <em class="parameter"><code>flags</code></em> <code class="type">text</code>
814          [<span class="optional">, <em class="parameter"><code>subexpr</code></em> <code class="type">integer</code> </span>] </span>] </span>] </span>] )
815         → <code class="returnvalue">text</code>
816        </p>
817        <p>
818         Returns the substring within <em class="parameter"><code>string</code></em> that
819         matches the <em class="parameter"><code>N</code></em>'th occurrence of the POSIX
820         regular expression <em class="parameter"><code>pattern</code></em>,
821         or <code class="literal">NULL</code> if there is no such match; see
822         <a class="xref" href="functions-matching.html#FUNCTIONS-POSIX-REGEXP" title="9.7.3. POSIX Regular Expressions">Section 9.7.3</a>.
823        </p>
824        <p>
825         <code class="literal">regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i')</code>
826         → <code class="returnvalue">CDEF</code>
827        </p>
828        <p>
829         <code class="literal">regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i', 2)</code>
830         → <code class="returnvalue">EF</code>
831        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
832         <a id="id-1.5.8.10.7.2.2.29.1.1.1" class="indexterm"></a>
833         <code class="function">repeat</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>number</code></em> <code class="type">integer</code> )
834         → <code class="returnvalue">text</code>
835        </p>
836        <p>
837         Repeats <em class="parameter"><code>string</code></em> the specified
838         <em class="parameter"><code>number</code></em> of times.
839        </p>
840        <p>
841         <code class="literal">repeat('Pg', 4)</code>
842         → <code class="returnvalue">PgPgPgPg</code>
843        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
844         <a id="id-1.5.8.10.7.2.2.30.1.1.1" class="indexterm"></a>
845         <code class="function">replace</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
846         <em class="parameter"><code>from</code></em> <code class="type">text</code>,
847         <em class="parameter"><code>to</code></em> <code class="type">text</code> )
848         → <code class="returnvalue">text</code>
849        </p>
850        <p>
851         Replaces all occurrences in <em class="parameter"><code>string</code></em> of
852         substring <em class="parameter"><code>from</code></em> with
853         substring <em class="parameter"><code>to</code></em>.
854        </p>
855        <p>
856         <code class="literal">replace('abcdefabcdef', 'cd', 'XX')</code>
857         → <code class="returnvalue">abXXefabXXef</code>
858        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
859         <a id="id-1.5.8.10.7.2.2.31.1.1.1" class="indexterm"></a>
860         <code class="function">reverse</code> ( <code class="type">text</code> )
861         → <code class="returnvalue">text</code>
862        </p>
863        <p>
864         Reverses the order of the characters in the string.
865        </p>
866        <p>
867         <code class="literal">reverse('abcde')</code>
868         → <code class="returnvalue">edcba</code>
869        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
870         <a id="id-1.5.8.10.7.2.2.32.1.1.1" class="indexterm"></a>
871         <code class="function">right</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
872          <em class="parameter"><code>n</code></em> <code class="type">integer</code> )
873         → <code class="returnvalue">text</code>
874        </p>
875        <p>
876         Returns last <em class="parameter"><code>n</code></em> characters in the string,
877         or when <em class="parameter"><code>n</code></em> is negative, returns all but
878         first |<em class="parameter"><code>n</code></em>| characters.
879        </p>
880        <p>
881         <code class="literal">right('abcde', 2)</code>
882         → <code class="returnvalue">de</code>
883        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
884         <a id="id-1.5.8.10.7.2.2.33.1.1.1" class="indexterm"></a>
885         <code class="function">split_part</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
886         <em class="parameter"><code>delimiter</code></em> <code class="type">text</code>,
887         <em class="parameter"><code>n</code></em> <code class="type">integer</code> )
888         → <code class="returnvalue">text</code>
889        </p>
890        <p>
891         Splits <em class="parameter"><code>string</code></em> at occurrences
892         of <em class="parameter"><code>delimiter</code></em> and returns
893         the <em class="parameter"><code>n</code></em>'th field (counting from one),
894         or when <em class="parameter"><code>n</code></em> is negative, returns
895         the |<em class="parameter"><code>n</code></em>|'th-from-last field.
896        </p>
897        <p>
898         <code class="literal">split_part('abc~@~def~@~ghi', '~@~', 2)</code>
899         → <code class="returnvalue">def</code>
900        </p>
901        <p>
902         <code class="literal">split_part('abc,def,ghi,jkl', ',', -2)</code>
903         → <code class="returnvalue">ghi</code>
904        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
905         <a id="id-1.5.8.10.7.2.2.34.1.1.1" class="indexterm"></a>
906         <code class="function">starts_with</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>prefix</code></em> <code class="type">text</code> )
907         → <code class="returnvalue">boolean</code>
908        </p>
909        <p>
910         Returns true if <em class="parameter"><code>string</code></em> starts
911         with <em class="parameter"><code>prefix</code></em>.
912        </p>
913        <p>
914         <code class="literal">starts_with('alphabet', 'alph')</code>
915         → <code class="returnvalue">t</code>
916        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
917         <a id="FUNCTION-STRING-TO-ARRAY" class="indexterm"></a>
918         <code class="function">string_to_array</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>delimiter</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>null_string</code></em> <code class="type">text</code> </span>] )
919         → <code class="returnvalue">text[]</code>
920        </p>
921        <p>
922         Splits the <em class="parameter"><code>string</code></em> at occurrences
923         of <em class="parameter"><code>delimiter</code></em> and forms the resulting fields
924         into a <code class="type">text</code> array.
925         If <em class="parameter"><code>delimiter</code></em> is <code class="literal">NULL</code>,
926         each character in the <em class="parameter"><code>string</code></em> will become a
927         separate element in the array.
928         If <em class="parameter"><code>delimiter</code></em> is an empty string, then
929         the <em class="parameter"><code>string</code></em> is treated as a single field.
930         If <em class="parameter"><code>null_string</code></em> is supplied and is
931         not <code class="literal">NULL</code>, fields matching that string are
932         replaced by <code class="literal">NULL</code>.
933         See also <a class="link" href="functions-array.html#FUNCTION-ARRAY-TO-STRING"><code class="function">array_to_string</code></a>.
934        </p>
935        <p>
936         <code class="literal">string_to_array('xx~~yy~~zz', '~~', 'yy')</code>
937         → <code class="returnvalue">{xx,NULL,zz}</code>
938        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
939         <a id="id-1.5.8.10.7.2.2.36.1.1.1" class="indexterm"></a>
940         <code class="function">string_to_table</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>delimiter</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>null_string</code></em> <code class="type">text</code> </span>] )
941         → <code class="returnvalue">setof text</code>
942        </p>
943        <p>
944         Splits the <em class="parameter"><code>string</code></em> at occurrences
945         of <em class="parameter"><code>delimiter</code></em> and returns the resulting fields
946         as a set of <code class="type">text</code> rows.
947         If <em class="parameter"><code>delimiter</code></em> is <code class="literal">NULL</code>,
948         each character in the <em class="parameter"><code>string</code></em> will become a
949         separate row of the result.
950         If <em class="parameter"><code>delimiter</code></em> is an empty string, then
951         the <em class="parameter"><code>string</code></em> is treated as a single field.
952         If <em class="parameter"><code>null_string</code></em> is supplied and is
953         not <code class="literal">NULL</code>, fields matching that string are
954         replaced by <code class="literal">NULL</code>.
955        </p>
956        <p>
957         <code class="literal">string_to_table('xx~^~yy~^~zz', '~^~', 'yy')</code>
958         → <code class="returnvalue"></code>
959 </p><pre class="programlisting">
960  xx
961  NULL
962  zz
963 </pre><p>
964        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
965         <a id="id-1.5.8.10.7.2.2.37.1.1.1" class="indexterm"></a>
966         <code class="function">strpos</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>substring</code></em> <code class="type">text</code> )
967         → <code class="returnvalue">integer</code>
968        </p>
969        <p>
970         Returns first starting index of the specified <em class="parameter"><code>substring</code></em>
971         within <em class="parameter"><code>string</code></em>, or zero if it's not present.
972         (Same as <code class="literal">position(<em class="parameter"><code>substring</code></em> in
973         <em class="parameter"><code>string</code></em>)</code>, but note the reversed
974         argument order.)
975        </p>
976        <p>
977         <code class="literal">strpos('high', 'ig')</code>
978         → <code class="returnvalue">2</code>
979        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
980         <a id="id-1.5.8.10.7.2.2.38.1.1.1" class="indexterm"></a>
981         <code class="function">substr</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>, <em class="parameter"><code>start</code></em> <code class="type">integer</code> [<span class="optional">, <em class="parameter"><code>count</code></em> <code class="type">integer</code> </span>] )
982         → <code class="returnvalue">text</code>
983        </p>
984        <p>
985         Extracts the substring of <em class="parameter"><code>string</code></em> starting at
986         the <em class="parameter"><code>start</code></em>'th character,
987         and extending for <em class="parameter"><code>count</code></em> characters if that is
988         specified.  (Same
989         as <code class="literal">substring(<em class="parameter"><code>string</code></em>
990         from <em class="parameter"><code>start</code></em>
991         for <em class="parameter"><code>count</code></em>)</code>.)
992        </p>
993        <p>
994         <code class="literal">substr('alphabet', 3)</code>
995         → <code class="returnvalue">phabet</code>
996        </p>
997        <p>
998         <code class="literal">substr('alphabet', 3, 2)</code>
999         → <code class="returnvalue">ph</code>
1000        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1001         <a id="id-1.5.8.10.7.2.2.39.1.1.1" class="indexterm"></a>
1002         <code class="function">to_ascii</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code> )
1003         → <code class="returnvalue">text</code>
1004        </p>
1005        <p class="func_signature">
1006         <code class="function">to_ascii</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
1007         <em class="parameter"><code>encoding</code></em> <code class="type">name</code> )
1008         → <code class="returnvalue">text</code>
1009        </p>
1010        <p class="func_signature">
1011         <code class="function">to_ascii</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
1012         <em class="parameter"><code>encoding</code></em> <code class="type">integer</code> )
1013         → <code class="returnvalue">text</code>
1014        </p>
1015        <p>
1016         Converts <em class="parameter"><code>string</code></em> to <acronym class="acronym">ASCII</acronym>
1017         from another encoding, which may be identified by name or number.
1018         If <em class="parameter"><code>encoding</code></em> is omitted the database encoding
1019         is assumed (which in practice is the only useful case).
1020         The conversion consists primarily of dropping accents.
1021         Conversion is only supported
1022         from <code class="literal">LATIN1</code>, <code class="literal">LATIN2</code>,
1023         <code class="literal">LATIN9</code>, and <code class="literal">WIN1250</code> encodings.
1024         (See the <a class="xref" href="unaccent.html" title="F.48. unaccent — a text search dictionary which removes diacritics">unaccent</a> module for another, more flexible
1025         solution.)
1026        </p>
1027        <p>
1028         <code class="literal">to_ascii('Karél')</code>
1029         → <code class="returnvalue">Karel</code>
1030        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1031         <a id="id-1.5.8.10.7.2.2.40.1.1.1" class="indexterm"></a>
1032         <code class="function">to_bin</code> ( <code class="type">integer</code> )
1033         → <code class="returnvalue">text</code>
1034        </p>
1035        <p class="func_signature">
1036         <code class="function">to_bin</code> ( <code class="type">bigint</code> )
1037         → <code class="returnvalue">text</code>
1038        </p>
1039        <p>
1040         Converts the number to its equivalent two's complement binary
1041         representation.
1042        </p>
1043        <p>
1044         <code class="literal">to_bin(2147483647)</code>
1045         → <code class="returnvalue">1111111111111111111111111111111</code>
1046        </p>
1047        <p>
1048         <code class="literal">to_bin(-1234)</code>
1049         → <code class="returnvalue">11111111111111111111101100101110</code>
1050        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1051         <a id="id-1.5.8.10.7.2.2.41.1.1.1" class="indexterm"></a>
1052         <code class="function">to_hex</code> ( <code class="type">integer</code> )
1053         → <code class="returnvalue">text</code>
1054        </p>
1055        <p class="func_signature">
1056         <code class="function">to_hex</code> ( <code class="type">bigint</code> )
1057         → <code class="returnvalue">text</code>
1058        </p>
1059        <p>
1060         Converts the number to its equivalent two's complement hexadecimal
1061         representation.
1062        </p>
1063        <p>
1064         <code class="literal">to_hex(2147483647)</code>
1065         → <code class="returnvalue">7fffffff</code>
1066        </p>
1067        <p>
1068         <code class="literal">to_hex(-1234)</code>
1069         → <code class="returnvalue">fffffb2e</code>
1070        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1071         <a id="id-1.5.8.10.7.2.2.42.1.1.1" class="indexterm"></a>
1072         <code class="function">to_oct</code> ( <code class="type">integer</code> )
1073         → <code class="returnvalue">text</code>
1074        </p>
1075        <p class="func_signature">
1076         <code class="function">to_oct</code> ( <code class="type">bigint</code> )
1077         → <code class="returnvalue">text</code>
1078        </p>
1079        <p>
1080         Converts the number to its equivalent two's complement octal
1081         representation.
1082        </p>
1083        <p>
1084         <code class="literal">to_oct(2147483647)</code>
1085         → <code class="returnvalue">17777777777</code>
1086        </p>
1087        <p>
1088         <code class="literal">to_oct(-1234)</code>
1089         → <code class="returnvalue">37777775456</code>
1090        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1091         <a id="id-1.5.8.10.7.2.2.43.1.1.1" class="indexterm"></a>
1092         <code class="function">translate</code> ( <em class="parameter"><code>string</code></em> <code class="type">text</code>,
1093         <em class="parameter"><code>from</code></em> <code class="type">text</code>,
1094         <em class="parameter"><code>to</code></em> <code class="type">text</code> )
1095         → <code class="returnvalue">text</code>
1096        </p>
1097        <p>
1098         Replaces each character in <em class="parameter"><code>string</code></em> that
1099         matches a character in the <em class="parameter"><code>from</code></em> set with the
1100         corresponding character in the <em class="parameter"><code>to</code></em>
1101         set. If <em class="parameter"><code>from</code></em> is longer than
1102         <em class="parameter"><code>to</code></em>, occurrences of the extra characters in
1103         <em class="parameter"><code>from</code></em> are deleted.
1104        </p>
1105        <p>
1106         <code class="literal">translate('12345', '143', 'ax')</code>
1107         → <code class="returnvalue">a2x5</code>
1108        </p></td></tr><tr><td class="func_table_entry"><p class="func_signature">
1109         <a id="id-1.5.8.10.7.2.2.44.1.1.1" class="indexterm"></a>
1110         <code class="function">unistr</code> ( <code class="type">text</code> )
1111         → <code class="returnvalue">text</code>
1112        </p>
1113        <p>
1114         Evaluate escaped Unicode characters in the argument.  Unicode characters
1115         can be specified as
1116         <code class="literal">\<em class="replaceable"><code>XXXX</code></em></code> (4 hexadecimal
1117         digits), <code class="literal">\+<em class="replaceable"><code>XXXXXX</code></em></code> (6
1118         hexadecimal digits),
1119         <code class="literal">\u<em class="replaceable"><code>XXXX</code></em></code> (4 hexadecimal
1120         digits), or <code class="literal">\U<em class="replaceable"><code>XXXXXXXX</code></em></code>
1121         (8 hexadecimal digits).  To specify a backslash, write two
1122         backslashes.  All other characters are taken literally.
1123        </p>
1124
1125        <p>
1126         If the server encoding is not UTF-8, the Unicode code point identified
1127         by one of these escape sequences is converted to the actual server
1128         encoding; an error is reported if that's not possible.
1129        </p>
1130
1131        <p>
1132         This function provides a (non-standard) alternative to string
1133         constants with Unicode escapes (see <a class="xref" href="sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE" title="4.1.2.3. String Constants with Unicode Escapes">Section 4.1.2.3</a>).
1134        </p>
1135
1136        <p>
1137         <code class="literal">unistr('d\0061t\+000061')</code>
1138         → <code class="returnvalue">data</code>
1139        </p>
1140        <p>
1141         <code class="literal">unistr('d\u0061t\U00000061')</code>
1142         → <code class="returnvalue">data</code>
1143        </p></td></tr></tbody></table></div></div><br class="table-break" /><p>
1144     The <code class="function">concat</code>, <code class="function">concat_ws</code> and
1145     <code class="function">format</code> functions are variadic, so it is possible to
1146     pass the values to be concatenated or formatted as an array marked with
1147     the <code class="literal">VARIADIC</code> keyword (see <a class="xref" href="xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS" title="36.5.6. SQL Functions with Variable Numbers of Arguments">Section 36.5.6</a>).  The array's elements are
1148     treated as if they were separate ordinary arguments to the function.
1149     If the variadic array argument is NULL, <code class="function">concat</code>
1150     and <code class="function">concat_ws</code> return NULL, but
1151     <code class="function">format</code> treats a NULL as a zero-element array.
1152    </p><p>
1153     See also the aggregate function <code class="function">string_agg</code> in
1154     <a class="xref" href="functions-aggregate.html" title="9.21. Aggregate Functions">Section 9.21</a>, and the functions for
1155     converting between strings and the <code class="type">bytea</code> type in
1156     <a class="xref" href="functions-binarystring.html#FUNCTIONS-BINARYSTRING-CONVERSIONS" title="Table 9.13. Text/Binary String Conversion Functions">Table 9.13</a>.
1157    </p><div class="sect2" id="FUNCTIONS-STRING-FORMAT"><div class="titlepage"><div><div><h3 class="title">9.4.1. <code class="function">format</code> <a href="#FUNCTIONS-STRING-FORMAT" class="id_link">#</a></h3></div></div></div><a id="id-1.5.8.10.10.2" class="indexterm"></a><p>
1158      The function <code class="function">format</code> produces output formatted according to
1159      a format string, in a style similar to the C function
1160      <code class="function">sprintf</code>.
1161     </p><p>
1162 </p><pre class="synopsis">
1163 <code class="function">format</code>(<em class="parameter"><code>formatstr</code></em> <code class="type">text</code> [<span class="optional">, <em class="parameter"><code>formatarg</code></em> <code class="type">"any"</code> [<span class="optional">, ...</span>] </span>])
1164 </pre><p>
1165      <em class="parameter"><code>formatstr</code></em> is a format string that specifies how the
1166      result should be formatted.  Text in the format string is copied
1167      directly to the result, except where <em class="firstterm">format specifiers</em> are
1168      used.  Format specifiers act as placeholders in the string, defining how
1169      subsequent function arguments should be formatted and inserted into the
1170      result.  Each <em class="parameter"><code>formatarg</code></em> argument is converted to text
1171      according to the usual output rules for its data type, and then formatted
1172      and inserted into the result string according to the format specifier(s).
1173     </p><p>
1174      Format specifiers are introduced by a <code class="literal">%</code> character and have
1175      the form
1176 </p><pre class="synopsis">
1177 %[<em class="parameter"><code>position</code></em>][<em class="parameter"><code>flags</code></em>][<em class="parameter"><code>width</code></em>]<em class="parameter"><code>type</code></em>
1178 </pre><p>
1179      where the component fields are:
1180
1181      </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><em class="parameter"><code>position</code></em> (optional)</span></dt><dd><p>
1182          A string of the form <code class="literal"><em class="parameter"><code>n</code></em>$</code> where
1183          <em class="parameter"><code>n</code></em> is the index of the argument to print.
1184          Index 1 means the first argument after
1185          <em class="parameter"><code>formatstr</code></em>.  If the <em class="parameter"><code>position</code></em> is
1186          omitted, the default is to use the next argument in sequence.
1187         </p></dd><dt><span class="term"><em class="parameter"><code>flags</code></em> (optional)</span></dt><dd><p>
1188          Additional options controlling how the format specifier's output is
1189          formatted.  Currently the only supported flag is a minus sign
1190          (<code class="literal">-</code>) which will cause the format specifier's output to be
1191          left-justified.  This has no effect unless the <em class="parameter"><code>width</code></em>
1192          field is also specified.
1193         </p></dd><dt><span class="term"><em class="parameter"><code>width</code></em> (optional)</span></dt><dd><p>
1194          Specifies the <span class="emphasis"><em>minimum</em></span> number of characters to use to
1195          display the format specifier's output.  The output is padded on the
1196          left or right (depending on the <code class="literal">-</code> flag) with spaces as
1197          needed to fill the width.  A too-small width does not cause
1198          truncation of the output, but is simply ignored.  The width may be
1199          specified using any of the following: a positive integer; an
1200          asterisk (<code class="literal">*</code>) to use the next function argument as the
1201          width; or a string of the form <code class="literal">*<em class="parameter"><code>n</code></em>$</code> to
1202          use the <em class="parameter"><code>n</code></em>th function argument as the width.
1203         </p><p>
1204          If the width comes from a function argument, that argument is
1205          consumed before the argument that is used for the format specifier's
1206          value.  If the width argument is negative, the result is left
1207          aligned (as if the <code class="literal">-</code> flag had been specified) within a
1208          field of length <code class="function">abs</code>(<em class="parameter"><code>width</code></em>).
1209         </p></dd><dt><span class="term"><em class="parameter"><code>type</code></em> (required)</span></dt><dd><p>
1210          The type of format conversion to use to produce the format
1211          specifier's output.  The following types are supported:
1212          </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
1213             <code class="literal">s</code> formats the argument value as a simple
1214             string.  A null value is treated as an empty string.
1215            </p></li><li class="listitem"><p>
1216             <code class="literal">I</code> treats the argument value as an SQL
1217             identifier, double-quoting it if necessary.
1218             It is an error for the value to be null (equivalent to
1219             <code class="function">quote_ident</code>).
1220            </p></li><li class="listitem"><p>
1221             <code class="literal">L</code> quotes the argument value as an SQL literal.
1222             A null value is displayed as the string <code class="literal">NULL</code>, without
1223             quotes (equivalent to <code class="function">quote_nullable</code>).
1224            </p></li></ul></div><p>
1225         </p></dd></dl></div><p>
1226     </p><p>
1227      In addition to the format specifiers described above, the special sequence
1228      <code class="literal">%%</code> may be used to output a literal <code class="literal">%</code> character.
1229     </p><p>
1230      Here are some examples of the basic format conversions:
1231
1232 </p><pre class="screen">
1233 SELECT format('Hello %s', 'World');
1234 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">Hello World</code>
1235
1236 SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');
1237 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">Testing one, two, three, %</code>
1238
1239 SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');
1240 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">INSERT INTO "Foo bar" VALUES('O''Reilly')</code>
1241
1242 SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files');
1243 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">INSERT INTO locations VALUES('C:\Program Files')</code>
1244 </pre><p>
1245     </p><p>
1246      Here are examples using <em class="parameter"><code>width</code></em> fields
1247      and the <code class="literal">-</code> flag:
1248
1249 </p><pre class="screen">
1250 SELECT format('|%10s|', 'foo');
1251 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|       foo|</code>
1252
1253 SELECT format('|%-10s|', 'foo');
1254 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|foo       |</code>
1255
1256 SELECT format('|%*s|', 10, 'foo');
1257 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|       foo|</code>
1258
1259 SELECT format('|%*s|', -10, 'foo');
1260 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|foo       |</code>
1261
1262 SELECT format('|%-*s|', 10, 'foo');
1263 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|foo       |</code>
1264
1265 SELECT format('|%-*s|', -10, 'foo');
1266 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|foo       |</code>
1267 </pre><p>
1268     </p><p>
1269      These examples show use of <em class="parameter"><code>position</code></em> fields:
1270
1271 </p><pre class="screen">
1272 SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three');
1273 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">Testing three, two, one</code>
1274
1275 SELECT format('|%*2$s|', 'foo', 10, 'bar');
1276 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|       bar|</code>
1277
1278 SELECT format('|%1$*2$s|', 'foo', 10, 'bar');
1279 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">|       foo|</code>
1280 </pre><p>
1281     </p><p>
1282      Unlike the standard C function <code class="function">sprintf</code>,
1283      <span class="productname">PostgreSQL</span>'s <code class="function">format</code> function allows format
1284      specifiers with and without <em class="parameter"><code>position</code></em> fields to be mixed
1285      in the same format string.  A format specifier without a
1286      <em class="parameter"><code>position</code></em> field always uses the next argument after the
1287      last argument consumed.
1288      In addition, the <code class="function">format</code> function does not require all
1289      function arguments to be used in the format string.
1290      For example:
1291
1292 </p><pre class="screen">
1293 SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
1294 <em class="lineannotation"><span class="lineannotation">Result: </span></em><code class="computeroutput">Testing three, two, three</code>
1295 </pre><p>
1296     </p><p>
1297      The <code class="literal">%I</code> and <code class="literal">%L</code> format specifiers are particularly
1298      useful for safely constructing dynamic SQL statements.  See
1299      <a class="xref" href="plpgsql-statements.html#PLPGSQL-QUOTE-LITERAL-EXAMPLE" title="Example 41.1. Quoting Values in Dynamic Queries">Example 41.1</a>.
1300     </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="functions-math.html" title="9.3. Mathematical Functions and Operators">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="functions.html" title="Chapter 9. Functions and Operators">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="functions-binarystring.html" title="9.5. Binary String Functions and Operators">Next</a></td></tr><tr><td width="40%" align="left" valign="top">9.3. Mathematical Functions and Operators </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 9.5. Binary String Functions and Operators</td></tr></table></div></body></html>