इसके अलावा, कुछ भी नहीं इंगित करता है कि पीएल/पीजीएसक्यूएल के साथ शुरू करने की आवश्यकता है। एक सादा (तैयार) SELECT
कथन यह कर सकता है। या एक SQL फ़ंक्शन, यदि आप इसे डेटाबेस में जारी रखना चाहते हैं। देखें:
और संबंधित:
समावेशी / अनन्य ऊपरी / निचली सीमा को परिभाषित करें सटीक रूप से आश्चर्यजनक कॉर्नर केस परिणामों से बचने के लिए। timestamp
की तुलना करते समय कॉलम से date
. तक , बाद वाले को टाइमस्टैम्प के लिए मजबूर किया जाता है जो दिन के पहले उदाहरण को दर्शाता है:YYYY.MM.DD 00:00:00
।
आपकी क्वेरी कहती है:
measurement_timestamp <= lastDate AND measurement_timestamp >= firstDate
... जिसमें सभी firstDate
. शामिल होंगे , लेकिन सभी lastDate
. को छोड़ दें 00:00 बजे पहले (सामान्य) उदाहरण को छोड़कर . आमतौर पर वह नहीं जो आप चाहते हैं। आपके सूत्रीकरण को देखते हुए, मुझे लगता है कि आप वास्तव में यही चाहते हैं:
CREATE OR REPLACE FUNCTION get_measurements_by_node_and_date(node_id integer
, firstDate date
, lastDate date)
RETURNS TABLE (measurement_id integer
, node_id integer
, carbon_dioxide float8
, hydrocarbons float8
, temperature float8
, humidity float8
, air_pressure float8
, measurement_timestamp timestamp)
LANGUAGE sql STABLE AS
$func$
SELECT m.id
, m.node_id
, m.carbon_dioxide
, m.hydrocarbons
, m.temperature
, m.humidity
, m.air_pressure
, m.measurement_timestamp -- AS measure -- just documentation
FROM public.measurements_lora m
WHERE m.node_id = _node_id
AND m.measurement_timestamp >= firstDate::timestamp
AND m.measurement_timestamp < (lastDate + 1)::timestamp -- ①!
$func$;
① इसमें सभी lastDate
. शामिल हैं , और कुशलता से। आप बस एक integer
date
. को / से मान दिनों को जोड़ने/घटाने के लिए
. स्पष्ट कास्ट ::timestamp
. के लिए वैकल्पिक है क्योंकि तारीख को अभिव्यक्ति में स्वचालित रूप से मजबूर किया जाएगा। लेकिन चूंकि हम यहां भ्रम दूर करने की कोशिश कर रहे हैं...
संबंधित:
एक तरफ 1:
सं. timestamp
मान नहीं हैं स्वरूपित, अवधि। वे केवल टाइमस्टैम्प मान हैं (आंतरिक रूप से युग के बाद से माइक्रोसेकंड की संख्या के रूप में संग्रहीत)। प्रदर्शन मान से पूरी तरह से अलग है और मान . को बदले बिना इसे एक सौ एक तरीके से समायोजित किया जा सकता है . क्या हो रहा है इसे बेहतर ढंग से समझने के लिए इस गलत धारणा से छुटकारा पाएं। देखें:
एक तरफ 2:
SQL की कुटिल प्रकृति के बारे में BETWEEN
:
एक तरफ 3:
Postgres में कानूनी, लोअर-केस आइडेंटिफ़ायर पर विचार करें। first_date
firstDate
. के बजाय . देखें:
संबंधित:
- PostgreSQL फ़ंक्शन डेटा क्यूब लौटाता है
- Postgresql किसी फ़ंक्शन में एक्ज़ीक्यूट फ़ॉर्मेट का उपयोग करने का प्रयास कर रहा है, लेकिन कोलेस में स्ट्रिंग स्वरूप देते समय स्तंभ प्राप्त करने में त्रुटि नहीं मिली