2000-01-05 07:06:23 +01:00
|
|
|
--
|
|
|
|
-- STRINGS
|
|
|
|
-- Test various data entry syntaxes.
|
|
|
|
--
|
|
|
|
-- SQL92 string continuation syntax
|
|
|
|
SELECT 'first line'
|
1997-12-01 03:48:47 +01:00
|
|
|
' - next line'
|
|
|
|
' - third line'
|
|
|
|
AS "Three lines to one";
|
2000-01-05 07:06:23 +01:00
|
|
|
Three lines to one
|
|
|
|
-------------------------------------
|
|
|
|
first line - next line - third line
|
1997-12-01 03:48:47 +01:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
-- illegal string continuation syntax
|
|
|
|
SELECT 'first line'
|
1997-12-01 03:48:47 +01:00
|
|
|
' - next line' /* this comment is not allowed here */
|
1998-05-29 15:22:42 +02:00
|
|
|
' - third line'
|
|
|
|
AS "Illegal comment within continuation";
|
1998-01-05 04:35:55 +01:00
|
|
|
ERROR: parser: parse error at or near "'"
|
2000-01-05 07:06:23 +01:00
|
|
|
--
|
|
|
|
-- test conversions between various string types
|
|
|
|
--
|
|
|
|
SELECT CAST(f1 AS text) AS "text(char)" FROM CHAR_TBL;
|
|
|
|
text(char)
|
|
|
|
------------
|
|
|
|
a
|
|
|
|
ab
|
|
|
|
abcd
|
|
|
|
abcd
|
1998-05-29 15:22:42 +02:00
|
|
|
(4 rows)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT CAST(f1 AS text) AS "text(varchar)" FROM VARCHAR_TBL;
|
|
|
|
text(varchar)
|
|
|
|
---------------
|
|
|
|
a
|
|
|
|
ab
|
|
|
|
abcd
|
|
|
|
abcd
|
1998-05-29 15:22:42 +02:00
|
|
|
(4 rows)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT CAST(name 'namefield' AS text) AS "text(name)";
|
|
|
|
text(name)
|
|
|
|
------------
|
|
|
|
namefield
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-17 01:16:41 +01:00
|
|
|
SELECT CAST(f1 AS char(10)) AS "char(text)" FROM TEXT_TBL;
|
|
|
|
char(text)
|
|
|
|
------------
|
|
|
|
doh!
|
|
|
|
hi de ho n
|
1998-05-29 15:22:42 +02:00
|
|
|
(2 rows)
|
|
|
|
|
2000-01-17 01:16:41 +01:00
|
|
|
SELECT CAST(f1 AS char(10)) AS "char(varchar)" FROM VARCHAR_TBL;
|
2000-01-05 07:06:23 +01:00
|
|
|
char(varchar)
|
|
|
|
---------------
|
2000-01-17 01:16:41 +01:00
|
|
|
a
|
|
|
|
ab
|
|
|
|
abcd
|
|
|
|
abcd
|
1998-05-29 15:22:42 +02:00
|
|
|
(4 rows)
|
|
|
|
|
2000-01-17 01:16:41 +01:00
|
|
|
SELECT CAST(name 'namefield' AS char(10)) AS "char(name)";
|
2000-01-05 07:06:23 +01:00
|
|
|
char(name)
|
|
|
|
------------
|
2000-01-17 01:16:41 +01:00
|
|
|
namefield
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT CAST(f1 AS varchar) AS "varchar(text)" FROM TEXT_TBL;
|
|
|
|
varchar(text)
|
|
|
|
-------------------
|
|
|
|
doh!
|
|
|
|
hi de ho neighbor
|
1998-05-29 15:22:42 +02:00
|
|
|
(2 rows)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT CAST(f1 AS varchar) AS "varchar(char)" FROM CHAR_TBL;
|
|
|
|
varchar(char)
|
|
|
|
---------------
|
|
|
|
a
|
|
|
|
ab
|
|
|
|
abcd
|
|
|
|
abcd
|
1998-05-29 15:22:42 +02:00
|
|
|
(4 rows)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT CAST(name 'namefield' AS varchar) AS "varchar(name)";
|
|
|
|
varchar(name)
|
|
|
|
---------------
|
|
|
|
namefield
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
--
|
|
|
|
-- test SQL92 string functions
|
|
|
|
--
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT TRIM(BOTH FROM ' bunch o blanks ') = 'bunch o blanks' AS "bunch o blanks";
|
2000-01-05 07:06:23 +01:00
|
|
|
bunch o blanks
|
|
|
|
----------------
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT TRIM(LEADING FROM ' bunch o blanks ') = 'bunch o blanks ' AS "bunch o blanks ";
|
2000-01-05 07:06:23 +01:00
|
|
|
bunch o blanks
|
|
|
|
------------------
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT TRIM(TRAILING FROM ' bunch o blanks ') = ' bunch o blanks' AS " bunch o blanks";
|
2000-01-05 07:06:23 +01:00
|
|
|
bunch o blanks
|
|
|
|
------------------
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT TRIM(BOTH 'x' FROM 'xxxxxsome Xsxxxxx') = 'some Xs' AS "some Xs";
|
2000-01-05 07:06:23 +01:00
|
|
|
some Xs
|
|
|
|
---------
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT SUBSTRING('1234567890' FROM 3) = '34567890' AS "34567890";
|
2000-01-05 07:06:23 +01:00
|
|
|
34567890
|
|
|
|
----------
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT SUBSTRING('1234567890' FROM 4 FOR 3) = '456' AS "456";
|
2000-01-05 07:06:23 +01:00
|
|
|
456
|
|
|
|
-----
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT POSITION('4' IN '1234567890') = '4' AS "4";
|
2000-01-05 07:06:23 +01:00
|
|
|
4
|
|
|
|
---
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-08-07 03:43:14 +02:00
|
|
|
SELECT POSITION(5 IN '1234567890') = '5' AS "5";
|
2000-01-05 07:06:23 +01:00
|
|
|
5
|
|
|
|
---
|
2000-08-07 03:43:14 +02:00
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
--
|
|
|
|
-- test LIKE
|
|
|
|
-- Be sure to form every test as a LIKE/NOT LIKE pair.
|
|
|
|
--
|
|
|
|
-- simplest examples
|
|
|
|
SELECT 'hawkeye' LIKE 'h%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT LIKE 'h%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' LIKE 'H%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT LIKE 'H%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' LIKE 'indio%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT LIKE 'indio%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' LIKE 'h%eye' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT LIKE 'h%eye' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' LIKE '_ndio' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' NOT LIKE '_ndio' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' LIKE 'in__o' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' NOT LIKE 'in__o' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' LIKE 'in_o' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' NOT LIKE 'in_o' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- unused escape character
|
|
|
|
SELECT 'hawkeye' LIKE 'h%' ESCAPE '#' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT LIKE 'h%' ESCAPE '#' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' LIKE 'ind_o' ESCAPE '$' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' NOT LIKE 'ind_o' ESCAPE '$' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- escape character
|
|
|
|
SELECT 'h%' LIKE 'h#%' ESCAPE '#' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%' NOT LIKE 'h#%' ESCAPE '#' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%wkeye' LIKE 'h#%' ESCAPE '#' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%wkeye' NOT LIKE 'h#%' ESCAPE '#' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%wkeye' LIKE 'h#%%' ESCAPE '#' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%wkeye' NOT LIKE 'h#%%' ESCAPE '#' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%awkeye' LIKE 'h#%a%k%e' ESCAPE '#' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'h%awkeye' NOT LIKE 'h#%a%k%e' ESCAPE '#' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' LIKE '_ndio' ESCAPE '$' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'indio' NOT LIKE '_ndio' ESCAPE '$' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' LIKE 'i$_d_o' ESCAPE '$' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' NOT LIKE 'i$_d_o' ESCAPE '$' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' LIKE 'i$_nd_o' ESCAPE '$' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' NOT LIKE 'i$_nd_o' ESCAPE '$' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' LIKE 'i$_d%o' ESCAPE '$' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'i_dio' NOT LIKE 'i$_d%o' ESCAPE '$' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
-- escape character same as pattern character
|
|
|
|
SELECT 'maca' LIKE 'm%aca' ESCAPE '%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'maca' NOT LIKE 'm%aca' ESCAPE '%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'ma%a' LIKE 'm%a%%a' ESCAPE '%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'ma%a' NOT LIKE 'm%a%%a' ESCAPE '%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'bear' LIKE 'b_ear' ESCAPE '_' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'bear' NOT LIKE 'b_ear' ESCAPE '_' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'be_r' LIKE 'b_e__r' ESCAPE '_' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'be_r' NOT LIKE 'b_e__r' ESCAPE '_' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'be_r' LIKE '__e__r' ESCAPE '_' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'be_r' NOT LIKE '__e__r' ESCAPE '_' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
--
|
|
|
|
-- test ILIKE (case-insensitive LIKE)
|
|
|
|
-- Be sure to form every test as an ILIKE/NOT ILIKE pair.
|
|
|
|
--
|
|
|
|
SELECT 'hawkeye' ILIKE 'h%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT ILIKE 'h%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' ILIKE 'H%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT ILIKE 'H%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' ILIKE 'H%Eye' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
f
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'hawkeye' NOT ILIKE 'H%Eye' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'Hawkeye' ILIKE 'h%' AS "true";
|
|
|
|
true
|
|
|
|
------
|
|
|
|
t
|
|
|
|
(1 row)
|
|
|
|
|
|
|
|
SELECT 'Hawkeye' NOT ILIKE 'h%' AS "false";
|
|
|
|
false
|
|
|
|
-------
|
|
|
|
f
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
--
|
|
|
|
-- test implicit type conversion
|
|
|
|
--
|
|
|
|
SELECT 'unknown' || ' and unknown' AS "Concat unknown types";
|
|
|
|
Concat unknown types
|
|
|
|
----------------------
|
|
|
|
unknown and unknown
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT text 'text' || ' and unknown' AS "Concat text to unknown type";
|
|
|
|
Concat text to unknown type
|
|
|
|
-----------------------------
|
|
|
|
text and unknown
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-17 01:16:41 +01:00
|
|
|
SELECT text 'text' || char(10) ' and characters' AS "Concat text to char";
|
2000-01-05 07:06:23 +01:00
|
|
|
Concat text to char
|
|
|
|
---------------------
|
2000-01-17 01:16:41 +01:00
|
|
|
text and chara
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|
2000-01-05 07:06:23 +01:00
|
|
|
SELECT text 'text' || varchar ' and varchar' AS "Concat text to varchar";
|
|
|
|
Concat text to varchar
|
|
|
|
------------------------
|
|
|
|
text and varchar
|
1998-05-29 15:22:42 +02:00
|
|
|
(1 row)
|
|
|
|
|