[英]How do I convert a T-SQL query to PostgreSQL that concatenates substrings?
這是我的查詢:
SELECT
*,
CONCAT(
RIGHT( account_no, 4),
RIGHT( customer_id, 5 )
) AS "password for my diplomo"
FROM
account_info;
但我得到這個錯誤:
錯誤:function
left(bigint, integer)
不存在;
我的桌子是:
CREATE TABLE account_info (
account_no bigint NOT NULL PRIMARY KEY,
customer_id varchar(...)
)
當您實際使用 PostgreSQL 時,您似乎正在使用 T-SQL 或 JET Red SQL 參考(分別用於 MS SQL 服務器和 MS Access)。
這是字符串函數和其他語法的 PostgreSQL v12 手冊頁。 你應該閱讀它。
至於讓您的查詢在 PostgreSQL 上運行,請將其更改為:
將account_no
轉換為varchar
類型,以便您可以使用SUBSTRING
。
用於提取子字符串的LEFT
和RIGHT
函數可以重新實現,如下所示:
LEFT( text, length ) == SUBSTRING( text FROM 0 FOR length ) RIGHT( text, length ) == SUBSTRING( text FROM CHAR_LENGTH( text ) - length )
並使用||
將文本值連接在一起。
像這樣:
SELECT
q.*,
(
SUBSTRING( q.account_no_text FROM CHAR_LENGTH( q.account_no_text ) - 4 )
||
SUBSTRING( q.customer_id FROM CHAR_LENGTH( q.customer_id ) - 5 )
) AS "password for my diplomo"
FROM
(
SELECT
ai.*,
ai.account_no::varchar(10) AS account_no_text
FROM
account_info AS ai
)
AS q
截圖證明:
Postgres函數left
和right
期望它們的第一個參數是text
。 因此,首先將account_no
轉換為輸入text
,然后您的查詢(有點簡化)將起作用。
SELECT *,
right(account_no::text, 4) || right(customer_id, 5) as pfmd
FROM account_info;
不相關但 Postgres 下的最佳實踐是使用類型text
而不是char
或varchar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.