नीला ADF त्रुटि अंकगणित ओवरफ़्लो त्रुटि अभिव्यक्ति में कनवर्ट करने के लिए डेटा प्रकार int

0

सवाल

मैं काम कर रहा हूँ के साथ नीला ADF और मैं समस्या आ रहा है जब मैं इस क्वेरी को निष्पादित नीला पर ADF:

SELECT COUNT(*) AS c
FROM TABLE 
WHERE CONVERT(date, (FORMAT(DATEADD(second, CONVERT(bigint, TS) / 1000, '19700101'), 'yyyy-MM-dd'))) = CONVERT(Date, GETDATE())

के उत्पादन में एक त्रुटि है

अंकगणित ओवरफ़्लो

लेकिन अगर मैं बदल = करने के लिए एक >=, क्वेरी काम करता है और रिटर्न एक उत्पादन.

के TS एक UNIXTIMESTAMP की तरह 1637680012264.

के संयोजन का उपयोग कर >= और < ठीक नहीं है क्योंकि मैं कर रहा हूँ के साथ काम नहीं सटे दिनों (मैं का उपयोग करने की जरूरत WHERE TS IN (date1, date2, etc...)

किसी ने मेरी मदद करो? धन्यवाद अग्रिम में

azure azure-data-factory sql sql-server
2021-11-23 15:02:27
2

सबसे अच्छा जवाब

0

अधिमानतः, मैं बदल जाएगा तालिका स्टोर करने के लिए datetime2 मूल्यों के बजाय जटिल epoch कबाड़.

लेकिन, यह सोचते हैं आप तय नहीं कर सकते डिजाइन...

करने के लिए Larnu के बिंदु पर, आप नहीं चाहते हैं को लागू करने के लिए संगणना स्तंभ के लिए, और आप निश्चित रूप से नहीं लागू करना चाहते हैं FORMAT() दोनों पक्षों के लिए क्योंकि FORMAT() एक निरपेक्ष कुत्ते.

इसके बजाय, मैं मिल जाएगा सीमाओं को आज के लिए, का उपयोग करें और एक ओपन एंडेड रेंज. यह मान लिया गया है TS कॉलम होना चाहिए bigint:

DECLARE @d date = GETDATE();

DECLARE @start bigint = DATEDIFF(SECOND, '19700101', @d),
        @end   bigint = DATEDIFF(SECOND, '19700101', DATEADD(DAY, 1, @d));

SELECT COUNT(*) AS c
FROM dbo.[TABLE]
WHERE TS >= @start * 1000 
  AND TS <  @end   * 1000;

इस से बचा जाता है किसी भी स्वरूपण भूमि के ऊपर है, जटिल और अनावश्यक परिवर्तित भाव (TS पहले से ही होना चाहिए एक bigint, ठीक है, तो क्यों स्पष्ट CONVERT()?).


अगर आप की जरूरत है गैर-निरंतर दिन, ठीक है, हम कर सकते हैं अभी भी यह पूरा करने के साथ अब तक कम दुरुपयोग करने के लिए नहीं । बस बनाने के लिए एक अस्थायी तालिका या तालिका चर के साथ परिकलित स्तंभों को सम्मिलित करते हैं, अपने कई तिथियों में वहाँ है, और फिर बाहरी में शामिल होने के लिए ।

DECLARE @d table
(
  d datetime2, 
  s AS CONVERT(bigint, 
    DATEDIFF(SECOND, '19700101', d)) * 1000,
  e AS CONVERT(bigint, 
    DATEDIFF(SECOND, '19700101', DATEADD(DAY, 1, d))) * 1000
);

INSERT @d(d) VALUES('20211123'),('20211007');

-- if you want a row per day:
SELECT d.d, COUNT(t.TS) AS c
FROM @d AS d
LEFT OUTER JOIN dbo.[TABLE] AS t
   ON  t.TS >= d.s
   AND t.TS <  d.e
GROUP BY d.d
ORDER BY d.d;

-- if you just want a total count:
SELECT COUNT(t.TS) AS c
FROM @d AS d
LEFT OUTER JOIN dbo.[TABLE] AS t
   ON  t.TS >= d.s
   AND t.TS <  d.e;

बहुत अधिक पर तारीख बुरी आदतों और सर्वोत्तम प्रथाओं:

2021-11-23 15:46:34

धन्यवाद हारून, भले ही अपने समाधान यह नहीं है कि मैं क्या देख रहा था के लिए आप प्रबुद्ध मेरी टीम के साथ है कि "का स्रोत नहीं है त्रुटि. DATEADD है कभी नहीं जा रहा करने के लिए जोड़ने के लिए सक्षम हो 3 अरबों सेकंड के लिए 1970. तो शायद फिर से विभाजित और जोड़ने की कोशिश करके मिनट के लिए, यदि आप केवल देखभाल की तारीख के बारे में, दूसरे स्तर की सटीकता नहीं होना चाहिए महत्वपूर्ण है । आप कर सकते हैं प्रदान की एक जोड़ी नमूना मूल्यों के लिए और परिणाम की उम्मीद उन लोगों के लिए". तो परिवर्तित UNIXTIMESTAMP दिनों में से divinding के लिए 60*60*1000*24
Salvatore Bonanno

@SalvatoreBonanno लेकिन यह अभी भी एक बहुत अक्षम तरीका है को हल करने के लिए समस्या है. आप चाहते हैं के गणित के दूसरे पक्ष पर है, जहां खंड है, मुझ पर विश्वास करो । जब तक TS स्तंभ अनुक्रमित नहीं है, और आप जानते हैं कि एक तथ्य के लिए आप कभी नहीं होगा यह सूचकांक.
Aaron Bertrand

हां, मैंने देखा समाधान के साथ अस्थायी तालिका. सबसे समस्याग्रस्त सामान है कि मैं कर सकते हैं केवल पढ़ने के लिए उपयोग तालिका ( तालिका बादल पर है) तो मैं कुछ भी नहीं पता है के बारे में सूचकांक पर यह (यह हो सकता है एक दृश्य भी है!) . तो गणित की समस्या के हल के लिए इस मुद्दे को अब है, लेकिन मैं कोशिश करता हूँ करने के लिए इसे अनुकूलित के रूप में आप ने कहा है.
Salvatore Bonanno
-1

मैं रेप्रो चाहते हैं में अपने स्थानीय ADF वातावरण में सक्षम था और परिणाम प्राप्त करने के लिए सफलतापूर्वक किया है.

नीचे नमूना तालिका:

यहाँ, मैं 3 पंक्तियों के साथ तारीख '2021-11-23' और 2 पंक्तियों से '2021-11-24'. TS स्तंभ एक तारीख में यूनिक्स टाइमस्टैम्प प्रारूप और dt_format स्तंभ को दिखाने के लिए है TS स्तंभ में दिनांक स्वरूप.

enter image description here

ADF:

का उपयोग कर खोज गतिविधि हो रही है, गणना की पंक्तियों जहां टीएस कॉलम में आज की तारीख में जाओ । (मैं कर रहा हूँ का उपयोग कर अपने कोड के साथ एक अलग तालिका).

SELECT COUNT(*) AS c
FROM tb1 
WHERE CONVERT(date, (FORMAT(DATEADD(second, CONVERT(bigint, TS) / 1000, '19700101'), 'yyyy-MM-dd'))) = CONVERT(Date, GETDATE())

enter image description here

आउटपुट:

enter image description here

2021-11-23 15:28:21

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में