POSTGRESQL - CHYBA: zdroj řetězec příliš krátký pro "RRRR" formátování pole Problém

0

Otázka

SELECT 
SUM (CASE WHEN (BANKCODE =1 OR IGBBANKCODE=1) THEN 1 ELSE 0 END)"ZİRAAT",
SUM (CASE WHEN (BANKCODE =1 OR IGBBANKCODE=1) THEN APPROVEDPRICE ELSE 0 END)/100 "ZİRAAT GELIR ",
SUM (CASE WHEN (BANKCODE =2 OR IGBBANKCODE=2) THEN 1 ELSE 0 END)"VAKIFBANK",
SUM (CASE WHEN (BANKCODE =2 OR IGBBANKCODE=2) THEN APPROVEDPRICE ELSE 0 END)/100 "VAKIFBANK GELIR ",
SUM (CASE WHEN (BANKCODE =4 OR IGBBANKCODE=4) THEN 1 ELSE 0 END)"ISBANK",
SUM (CASE WHEN (BANKCODE =4 OR IGBBANKCODE=4) THEN APPROVEDPRICE ELSE 0 END)/100 "ISBANK GELIR ",
SUM (CASE WHEN (BANKCODE =6 OR IGBBANKCODE=6) THEN 1 ELSE 0 END)"GARANTI",
SUM (CASE WHEN (BANKCODE =6 OR IGBBANKCODE=6) THEN APPROVEDPRICE ELSE 0 END)/100 "GARANTI GELIR ",
SUM (CASE WHEN (BANKCODE =7 OR IGBBANKCODE=7) THEN 1 ELSE 0 END)"DENIZBANK",
SUM (CASE WHEN (BANKCODE =7 OR IGBBANKCODE=7) THEN APPROVEDPRICE ELSE 0 END)/100 "DENIZBANK GELIR ",
COUNT (*)"TOLAM", 
SUM (APPROVEDPRICE/100)"TOPLAM GELİR"
FROM KKMO.sap_transactions_view
WHERE TRANSACTIONTYPE <>20
AND (TABLETYPE='ET' OR IGBSYSTEMTYPE IN(0))
AND (PAYMENTDATE IS NOT NULL OR IGBPAYMENTTRANSFERDATE IS NOT NULL) 
AND (TO_TIMESTAMP(PAYMENTDATE::VARCHAR,'YYYYMMDD')::DATE= CURRENT_DATE OR TO_TIMESTAMP(IGBPAYMENTTRANSFERDATE::VARCHAR,'YYYYMMDD')::DATE= CURRENT_DATE)  
ERROR:  source string too short for "YYYY" formatting field
DETAIL:  Field requires 4 characters, but only 1 remain.
HINT:  If your source string is not fixed-width, try using the "FM" modifier.
CONTEXT:  parallel worker
SQL state: 22007
datetime postgresql sql
2021-11-23 14:14:09
1

Nejlepší odpověď

1

Musí tam být řádek v tabulce, kde paymentdate obsahuje jeden znak:

SELECT to_timestamp('7', 'YYYYMMDD');

ERROR:  source string too short for "YYYY" formatting field
DETAIL:  Field requires 4 characters, but only 1 remain.
HINT:  If your source string is not fixed-width, try using the "FM" modifier.

Budete potřebovat alespoň čtyři, tak za rok 7. A. D., použijte toto:

SELECT to_timestamp('0007', 'YYYYMMDD');

         to_timestamp         
══════════════════════════════
 0007-01-01 00:00:00+01:05:21
(1 row)

Alternativně, jako chybová zpráva vám řekne, používat FM:

SELECT to_timestamp('7', 'FMYYYYMMDD');

         to_timestamp         
══════════════════════════════
 0007-01-01 00:00:00+01:05:21
(1 row)
2021-11-23 14:26:15

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................