Select

如何將用括號括起來的數字作為負數返回

  • June 15, 2021

我有一張桌子

CREATE TABLE tab1 (col1 integer, col2 character varying(20));

Col2 包含數值,但負值對應於括號 not 和減號 (-)。這是將 col2 作為字元的唯一目的,以便我們可以用括號保存否定。

INSERT INTO tab1 VALUES (100, '12345.50');
INSERT INTO tab1 VALUES (101, '10000.50');
INSERT INTO tab1 VALUES (102, '10050.00');
INSERT INTO tab1 VALUES (103, '(10050.00)');
INSERT INTO tab1 VALUES (104, '(10000.50)');

現在,當我顯示時,我希望正數正常顯示,帶括號的值表示前導減號 (-)。

   SELECT col1, col2 FROM tab1;
100 12345.50
101 10000.50
102 10050.00"
103 (10050.00)
104 (10000.50)

我需要呈現如下

100 12345.50
101 10000.50
102 10050.00
103 -10050.00
104 -10000.50

pgsql 是否有任何內置函式來處理這個問題?

謝謝你,問候,Shaamil。

我建議您定義col2asnumeric(15,2)而不是 as character varying。使用適當的類型總是更好。

轉換插入的值:

INSERT INTO tab1 VALUES
  (104, CAST(translate('(10000.50)', '()', '-') AS numeric(15,2)));

我不知道這種情況下的任何功能,

使用雙重替換

CREATE TABLE tab1 (col1 integer, col2 character varying(20));
INSERT INTO tab1 VALUES (100, '12345.50');
INSERT INTO tab1 VALUES (101, '10000.50');
INSERT INTO tab1 VALUES (102, '10050.00');
INSERT INTO tab1 VALUES (103, '(10050.00)');

1 行受影響

INSERT INTO tab1 VALUES (104, '(10000.50)');

1 行受影響

SELECT col1, REPLACE(REPLACE(col2,')',''),'(','-') FROM tab1;
COL1 | 替換(替換(COL2,')',''),'(','-')
---: | :------------------------------------
 100 | 12345.50 
 101 | 10000.50 
 102 | 10050.00 
 103 | -10050.00 
 104 | -10000.50 

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/294237