मेरे पास निम्न परीक्षण उपयोग केस है जो ठीक काम कर रहा है:
WITH t1 AS (
SELECT 1 as id
UNION ALL
SELECT NULL
UNION ALL
SELECT 2
)
Select
*,
case when id is null then "null" when id = 1 then "test" end
from
t1
मेरी असली क्वेरी पर मेरे पास date_diff फ़ंक्शन है:
DATE_DIFF(second_date,first_date, DAY) as time_lag,
और निम्नलिखित केस स्टेटमेंट को लागू करने का प्रयास करते समय:
case when time_lag is null then "null" when time_lag = "1" then "test" end
मेरे पास यह त्रुटि है:
No matching signature for operator = for argument types: STRUCT<client_ID STRING, Total INT64, first_date DATE, ...>, STRING. Supported signatures: ANY = ANY at [79:49]
मैं समझता हूं कि DATE_DIFF कथन INT64
और कुछ शून्य मान लौटा रहा है क्योंकि सभी पंक्तियों में दिनांक नहीं है। मुझे समझ में नहीं आता कि मेरा परीक्षण उपयोग मामला मेरे वास्तविक उपयोग के मामले से कैसे भिन्न है। और मेरे वास्तविक उपयोग के मामले में क्या गलत है ...
2 जवाब
तुम्हें कोशिश करनी चाहिए
case when time_lag is null then "null" when time_lag = 1 then "test" end
जैसा कि आपने कहा - time_lag INT64 है इसलिए समस्या ... when time_lag = "1" then ...
में है/थी
No matching signature for operator = for argument types: STRUCT<client_ID STRING, Total INT64, first_date DATE, ...>, INT64. Supported signatures: ANY = ANY at [83:49]
मेरी टिप्पणी के आगे, आप डेटाबेस तालिका में एक कॉलम के रूप में time_lag का इलाज कर रहे हैं जो मुझे लगता है, ऐसा नहीं है। यह 2 कॉलम से परिकलित मान है। तो आपके पास 2 विकल्प हैं - या तो एक सबक्वेरी का उपयोग करें जो DATE_DIFF ऑपरेशन करता है और फिर इसे टाइम_लैग के रूप में उपनाम देता है। या सीधे केस एक्सप्रेशन में गणना का उपयोग करें।
CASE WHEN DATE_DIFF(second_date,first_date, DAY) is null THEN null WHEN DATE_DIFF(second_date,first_date, DAY) = 1 then 'Test' end
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।