Postgresql 8.4 喜欢 Concat
Postgresql 8.4 Like Concat
我在 postgresql 9.3 中的查询是:
SELECT *
FROM route
WHERE 'my/uri/address' LIKE CONCAT(c_uri, '%')
但是在 postgresql 8.4 中这段代码不起作用。
请问我该如何解决?
提前致谢!
在 PostgreSQL 8.4 版本中,字符串连接使用 ||
操作。
示例:'Post' || 'greSQL'
结果是:PostgreSQL
您也可以使用 WS_CONCAT
函数,但它在 8.4 中没有定义。您可以声明如下:
CREATE OR REPLACE FUNCTION concat_ws(
separator text,
VARIADIC names_array text[]
)
RETURNS text
LANGUAGE plpgsql
AS $$
BEGIN
RETURN array_to_string(array_remove(names_array, NULL), ' ');
END;
$$;
此定义与 9.x 及更高版本中的定义完全相同:首先传递分隔符文本,然后传递任意数量的文本以进行连接。 NULL
值被过滤掉。
示例:
SELECT WS_CONCAT(' ', 'Ford', 'Focus', NULL /* Missing body-style */, '1.8 L')
结果:Ford Focus 1.8 L
我在 postgresql 9.3 中的查询是:
SELECT *
FROM route
WHERE 'my/uri/address' LIKE CONCAT(c_uri, '%')
但是在 postgresql 8.4 中这段代码不起作用。
请问我该如何解决?
提前致谢!
在 PostgreSQL 8.4 版本中,字符串连接使用 ||
操作。
示例:'Post' || 'greSQL'
结果是:PostgreSQL
您也可以使用 WS_CONCAT
函数,但它在 8.4 中没有定义。您可以声明如下:
CREATE OR REPLACE FUNCTION concat_ws(
separator text,
VARIADIC names_array text[]
)
RETURNS text
LANGUAGE plpgsql
AS $$
BEGIN
RETURN array_to_string(array_remove(names_array, NULL), ' ');
END;
$$;
此定义与 9.x 及更高版本中的定义完全相同:首先传递分隔符文本,然后传递任意数量的文本以进行连接。 NULL
值被过滤掉。
示例:
SELECT WS_CONCAT(' ', 'Ford', 'Focus', NULL /* Missing body-style */, '1.8 L')
结果:Ford Focus 1.8 L