strings.sql

来自「postgresql8.3.4源码,开源数据库」· SQL 代码 · 共 453 行 · 第 1/2 页

SQL
453
字号
---- STRINGS-- Test various data entry syntaxes.---- SQL92 string continuation syntax-- E021-03 character string literalsSELECT 'first line'' - next line'	' - third line'	AS "Three lines to one";-- illegal string continuation syntaxSELECT 'first line'' - next line' /* this comment is not allowed here */' - third line'	AS "Illegal comment within continuation";---- test conversions between various string types-- E021-10 implicit casting among the character data types--SELECT CAST(f1 AS text) AS "text(char)" FROM CHAR_TBL;SELECT CAST(f1 AS text) AS "text(varchar)" FROM VARCHAR_TBL;SELECT CAST(name 'namefield' AS text) AS "text(name)";-- since this is an explicit cast, it should truncate w/o error:SELECT CAST(f1 AS char(10)) AS "char(text)" FROM TEXT_TBL;-- note: implicit-cast case is tested in char.sqlSELECT CAST(f1 AS char(20)) AS "char(text)" FROM TEXT_TBL;SELECT CAST(f1 AS char(10)) AS "char(varchar)" FROM VARCHAR_TBL;SELECT CAST(name 'namefield' AS char(10)) AS "char(name)";SELECT CAST(f1 AS varchar) AS "varchar(text)" FROM TEXT_TBL;SELECT CAST(f1 AS varchar) AS "varchar(char)" FROM CHAR_TBL;SELECT CAST(name 'namefield' AS varchar) AS "varchar(name)";---- test SQL92 string functions-- E### and T### are feature reference numbers from SQL99---- E021-09 trim functionSELECT TRIM(BOTH FROM '  bunch o blanks  ') = 'bunch o blanks' AS "bunch o blanks";SELECT TRIM(LEADING FROM '  bunch o blanks  ') = 'bunch o blanks  ' AS "bunch o blanks  ";SELECT TRIM(TRAILING FROM '  bunch o blanks  ') = '  bunch o blanks' AS "  bunch o blanks";SELECT TRIM(BOTH 'x' FROM 'xxxxxsome Xsxxxxx') = 'some Xs' AS "some Xs";-- E021-06 substring expressionSELECT SUBSTRING('1234567890' FROM 3) = '34567890' AS "34567890";SELECT SUBSTRING('1234567890' FROM 4 FOR 3) = '456' AS "456";-- T581 regular expression substring (with SQL99's bizarre regexp syntax)SELECT SUBSTRING('abcdefg' FROM 'a#"(b_d)#"%' FOR '#') AS "bcd";-- No match should return NULLSELECT SUBSTRING('abcdefg' FROM '#"(b_d)#"%' FOR '#') IS NULL AS "True";-- Null inputs should return NULLSELECT SUBSTRING('abcdefg' FROM '(b|c)' FOR NULL) IS NULL AS "True";SELECT SUBSTRING(NULL FROM '(b|c)' FOR '#') IS NULL AS "True";SELECT SUBSTRING('abcdefg' FROM NULL FOR '#') IS NULL AS "True";-- PostgreSQL extension to allow omitting the escape character;-- here the regexp is taken as Posix syntaxSELECT SUBSTRING('abcdefg' FROM 'c.e') AS "cde";-- With a parenthesized subexpression, return only what matches the subexprSELECT SUBSTRING('abcdefg' FROM 'b(.*)f') AS "cde";-- PostgreSQL extension to allow using back reference in replace string;SELECT regexp_replace('1112223333', E'(\\d{3})(\\d{3})(\\d{4})', E'(\\1) \\2-\\3');SELECT regexp_replace('AAA   BBB   CCC   ', E'\\s+', ' ', 'g');SELECT regexp_replace('AAA', '^|$', 'Z', 'g');SELECT regexp_replace('AAA aaa', 'A+', 'Z', 'gi');-- invalid regexp optionSELECT regexp_replace('AAA aaa', 'A+', 'Z', 'z');-- set so we can tell NULL from empty string\pset null '\\N'-- return all matches from regexpSELECT regexp_matches('foobarbequebaz', $re$(bar)(beque)$re$);-- test case insensitiveSELECT regexp_matches('foObARbEqUEbAz', $re$(bar)(beque)$re$, 'i');-- global option - more than one matchSELECT regexp_matches('foobarbequebazilbarfbonk', $re$(b[^b]+)(b[^b]+)$re$, 'g');-- empty capture group (matched empty string)SELECT regexp_matches('foobarbequebaz', $re$(bar)(.*)(beque)$re$);-- no matchSELECT regexp_matches('foobarbequebaz', $re$(bar)(.+)(beque)$re$);-- optional capture group did not match, null entry in arraySELECT regexp_matches('foobarbequebaz', $re$(bar)(.+)?(beque)$re$);-- no capture groupsSELECT regexp_matches('foobarbequebaz', $re$barbeque$re$);-- give me errorsSELECT regexp_matches('foobarbequebaz', $re$(bar)(beque)$re$, 'gz');SELECT regexp_matches('foobarbequebaz', $re$(barbeque$re$);SELECT regexp_matches('foobarbequebaz', $re$(bar)(beque){2,1}$re$);-- split string on regexpSELECT foo, length(foo) FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', $re$\s+$re$) AS foo;SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', $re$\s+$re$);SELECT foo, length(foo) FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', $re$\s*$re$) AS foo;SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', $re$\s*$re$);SELECT foo, length(foo) FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', '') AS foo;SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', '');-- case insensitiveSELECT foo, length(foo) FROM regexp_split_to_table('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'i') AS foo;SELECT regexp_split_to_array('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'i');-- no match of patternSELECT foo, length(foo) FROM regexp_split_to_table('the quick brown fox jumped over the lazy dog', 'nomatch') AS foo;SELECT regexp_split_to_array('the quick brown fox jumped over the lazy dog', 'nomatch');-- some corner casesSELECT regexp_split_to_array('123456','1');SELECT regexp_split_to_array('123456','6');SELECT regexp_split_to_array('123456','.');-- errorsSELECT foo, length(foo) FROM regexp_split_to_table('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'zippy') AS foo;SELECT regexp_split_to_array('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'iz');-- global option meaningless for regexp_splitSELECT foo, length(foo) FROM regexp_split_to_table('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'g') AS foo;SELECT regexp_split_to_array('thE QUick bROWn FOx jUMPed ovEr THE lazy dOG', 'e', 'g');-- change NULL-display back\pset null ''-- E021-11 position expressionSELECT POSITION('4' IN '1234567890') = '4' AS "4";SELECT POSITION('5' IN '1234567890') = '5' AS "5";-- T312 character overlay functionSELECT OVERLAY('abcdef' PLACING '45' FROM 4) AS "abc45f";SELECT OVERLAY('yabadoo' PLACING 'daba' FROM 5) AS "yabadaba";SELECT OVERLAY('yabadoo' PLACING 'daba' FROM 5 FOR 0) AS "yabadabadoo";SELECT OVERLAY('babosa' PLACING 'ubb' FROM 2 FOR 4) AS "bubba";---- test LIKE-- Be sure to form every test as a LIKE/NOT LIKE pair.---- simplest examples-- E061-04 like predicateSELECT 'hawkeye' LIKE 'h%' AS "true";SELECT 'hawkeye' NOT LIKE 'h%' AS "false";SELECT 'hawkeye' LIKE 'H%' AS "false";SELECT 'hawkeye' NOT LIKE 'H%' AS "true";SELECT 'hawkeye' LIKE 'indio%' AS "false";SELECT 'hawkeye' NOT LIKE 'indio%' AS "true";SELECT 'hawkeye' LIKE 'h%eye' AS "true";SELECT 'hawkeye' NOT LIKE 'h%eye' AS "false";SELECT 'indio' LIKE '_ndio' AS "true";SELECT 'indio' NOT LIKE '_ndio' AS "false";SELECT 'indio' LIKE 'in__o' AS "true";SELECT 'indio' NOT LIKE 'in__o' AS "false";SELECT 'indio' LIKE 'in_o' AS "false";SELECT 'indio' NOT LIKE 'in_o' AS "true";-- unused escape characterSELECT 'hawkeye' LIKE 'h%' ESCAPE '#' AS "true";SELECT 'hawkeye' NOT LIKE 'h%' ESCAPE '#' AS "false";SELECT 'indio' LIKE 'ind_o' ESCAPE '$' AS "true";SELECT 'indio' NOT LIKE 'ind_o' ESCAPE '$' AS "false";-- escape character-- E061-05 like predicate with escape clauseSELECT 'h%' LIKE 'h#%' ESCAPE '#' AS "true";SELECT 'h%' NOT LIKE 'h#%' ESCAPE '#' AS "false";SELECT 'h%wkeye' LIKE 'h#%' ESCAPE '#' AS "false";SELECT 'h%wkeye' NOT LIKE 'h#%' ESCAPE '#' AS "true";SELECT 'h%wkeye' LIKE 'h#%%' ESCAPE '#' AS "true";SELECT 'h%wkeye' NOT LIKE 'h#%%' ESCAPE '#' AS "false";SELECT 'h%awkeye' LIKE 'h#%a%k%e' ESCAPE '#' AS "true";SELECT 'h%awkeye' NOT LIKE 'h#%a%k%e' ESCAPE '#' AS "false";SELECT 'indio' LIKE '_ndio' ESCAPE '$' AS "true";SELECT 'indio' NOT LIKE '_ndio' ESCAPE '$' AS "false";SELECT 'i_dio' LIKE 'i$_d_o' ESCAPE '$' AS "true";SELECT 'i_dio' NOT LIKE 'i$_d_o' ESCAPE '$' AS "false";SELECT 'i_dio' LIKE 'i$_nd_o' ESCAPE '$' AS "false";SELECT 'i_dio' NOT LIKE 'i$_nd_o' ESCAPE '$' AS "true";SELECT 'i_dio' LIKE 'i$_d%o' ESCAPE '$' AS "true";SELECT 'i_dio' NOT LIKE 'i$_d%o' ESCAPE '$' AS "false";-- escape character same as pattern characterSELECT 'maca' LIKE 'm%aca' ESCAPE '%' AS "true";SELECT 'maca' NOT LIKE 'm%aca' ESCAPE '%' AS "false";SELECT 'ma%a' LIKE 'm%a%%a' ESCAPE '%' AS "true";SELECT 'ma%a' NOT LIKE 'm%a%%a' ESCAPE '%' AS "false";

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?