PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

$$ वर्णों वाली SQLExec के साथ फ़ाइल निष्पादित करें

$$ डॉलर-उद्धरण . डॉलर के बीच एक स्ट्रिंग डालकर इसे (बहुत!) कम स्ट्रिंग के साथ संघर्ष करने की संभावना कम करें:


CREATE OR REPLACE FUNCTION time_to_sec(timepoint timestamp with time zone)
  RETURNS bigint LANGUAGE plpgsql AS
$BODY$
DECLARE
 seconds bigint;
 secondsFromEpoch bigint;
 secondsFromMidnight bigint;
BEGIN
 secondsFromEpoch = EXTRACT(EPOCH FROM timepoint)::bigint;
 secondsFromMidnight = EXTRACT(EPOCH FROM CURRENT_TIMESTAMP::date)::bigint;
 seconds = secondsFromEpoch - secondsFromMidnight;
 return seconds;
END;
$BODY$;

अधिक सलाह

  • plpgsql में असाइनमेंट ऑपरेटर है := . = अनिर्दिष्ट है और भविष्य के रिलीज में दूर जा सकता है। इसके तहत और संबंधित प्रश्न

  • CURRENT_DATE का उपयोग करें CURRENT_TIMESTAMP::date . के बजाय ।

  • इसकी अनुमति है, लेकिन मैं सलाह दूंगा कि plpgsql में मिश्रित केस पैरामीटर नामों का उपयोग न करें। वे केस असंवेदनशील हैं।

  • सबसे महत्वपूर्ण बात, सरल बनाएं :

    CREATE OR REPLACE FUNCTION time_to_sec2(timepoint timestamp with time zone)
      RETURNS bigint LANGUAGE plpgsql STABLE AS
    $BODY$
    BEGIN
        RETURN EXTRACT(EPOCH FROM timepoint - current_date)::bigint;
    END;
    $BODY$;
    

    या यहां तक ​​कि:

    CREATE OR REPLACE FUNCTION time_to_sec3(timepoint timestamp with time zone)
      RETURNS bigint LANGUAGE sql AS
    $BODY$
        SELECT EXTRACT(EPOCH FROM timepoint - current_date)::bigint;
    $BODY$;
    
  • घोषित किया जा सकता है STABLE !

  • निकट से संबंधित कार्य भी है age() PostgreSQL में लगभग, लेकिन काफी नहीं, वही कर रहा है:यह मानक-वर्षों और महीनों के साथ "प्रतीकात्मक" परिणाम देता है। इसलिए, age() के साथ व्यंजक लंबे समय तक अलग-अलग परिणाम दे सकते हैं।

ये सभी समान हैं - लंबी अवधि के साथ अंतिम दो विचलन को छोड़कर:

WITH x(t) AS (VALUES ('2012-07-20 03:51:26+02'::timestamptz))
SELECT time_to_sec(t)  AS t1
      ,time_to_sec2(t) AS t2
      ,time_to_sec3(t) AS t3
      ,EXTRACT(EPOCH FROM t - current_date)::bigint AS t4
      ,EXTRACT(EPOCH FROM age(t, current_date))::bigint AS t5 -- deviates
      ,EXTRACT(EPOCH FROM age(t))::bigint * -1  AS t6  -- deviates
FROM   x;

मूल प्रश्न के रूप में:इस PostgreSQL त्रुटि संदेश का अर्थ यह नहीं है कि समस्या डॉलर चिह्न के साथ है:

अधिकांश समय यह अनुपलब्ध होता है ; उस लाइन से पहले। या हो सकता है कि XML में एक अन-एस्केप्ड स्पेशल कैरेक्टर, जैसे < > & ? डॉलर का चिह्न $ ठीक होना चाहिए। लेकिन मैं चींटी का विशेषज्ञ नहीं हूं। PostgreSQL लॉग में अधिक संदर्भ होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही बार में कई (लेकिन सभी नहीं) टेबल कैसे गिराएं?

  2. सरणी कॉलम पर डुप्लीकेट मान खोजें

  3. मैं एसक्यूएल में रिकर्सिव का उपयोग करके नया कॉलम वापस करना चाहता हूं?

  4. पायथन का उपयोग करके पोस्टग्रेएसक्यूएल में सीएसवी डेटा

  5. UNION, EXCEPT, या INTERSECT का उपयोग करते समय PostgreSQL में “ERROR:  तालिका के लिए FROM-क्लॉज प्रविष्टि अनुपलब्ध” को ठीक करें