मैं एक प्रश्न को ठीक करने का प्रयास कर रहा हूँ जो नए साल के बाद SSRS में प्रकाश में आया है। हमारे पास एक इनपुट है जो किसी अन्य एप्लिकेशन से आता है। यह एक तिथि लेता है और इसे varchar के रूप में संग्रहीत करता है। SSRS रिपोर्ट तब शीर्ष 100 'तारीखें' प्राप्त करती है लेकिन जब 2017 की तारीखें आ गई हैं, तो यह शीर्ष 100 में नहीं हैं।

मौजूदा क्वेरी इस प्रकार है

SELECT DISTINCT TOP (100)
FROM DenverTempData
ORDER by BY Date DESC

दिनांक VARCHAR के रूप में संग्रहीत है। तो स्पष्ट रूप से यह क्वेरी शीर्ष 100 होने के नाते 01012017 जैसे मान को नहीं पकड़ती है (अधिक मान 12312016 पसंद करते हैं)। मैंने सोचा कि शायद मैं इस कॉलम पर डेटाटाइप को datetime में बदल सकता हूं। लेकिन जानकारी एक फ्लैट फ़ाइल से आती है और परिवर्तित हो जाती है, इसलिए यह थोड़ा अधिक कठिन है। इसलिए मैं दिनांक कॉलम को datetime में परिवर्तित करते हुए विशिष्ट शीर्ष 100 का चयन करने की उम्मीद कर रहा हूं या बस तारीख और अंतिम 100 तिथियों को हथियाने की उम्मीद कर रहा हूं।

क्या कोई क्वेरी सिंटैक्स में मदद कर सकता है? मैं varchar को date में बदलने के लिए एक कलाकार के बारे में सोच रहा हूं, लेकिन मैं विशिष्ट शीर्ष 100 के साथ कैसे प्रारूपित करूं? मैं बस एक कॉलम से अंतिम 100 तिथियों को कालानुक्रमिक क्रम में पुनर्प्राप्त करना चाहता हूं जिसे varchar के रूप में संग्रहीत किया जाता है लेकिन इसमें date का प्रतिनिधित्व करने वाला एक स्ट्रिंग होता है।

उम्मीद है कि यह समझ में आता है

0
Joe Resler 4 जिंदा 2017, 00:03

2 जवाब

सबसे बढ़िया उत्तर

दिनांक को स्ट्रिंग के रूप में संग्रहीत करना हमेशा एक बुरा विचार है। यह अत्यधिक संस्कृति विशिष्ट है!

आप अपनी स्वरूपित स्ट्रिंग-तिथि को इस तरह वास्तविक तिथि पर डाल सकते हैं:

DECLARE @DateMMDDYYYY VARCHAR(100)='12312016';

SELECT CONVERT(DATE,STUFF(STUFF(@DateMMDDYYYY,5,0,'-'),3,0,'-'),110)

रूपांतरण के बाद आपकी छँटाई (और इसलिए TOP 100) को अपेक्षा के अनुरूप काम करना चाहिए।

मेरी मजबूत सलाह: इस तरह की परेशानी से बचने के लिए अपनी तिथियों को वास्तविक तिथि प्रकार के कॉलम में स्टोर करने का प्रयास करें!

1
Shnugo 4 जिंदा 2017, 01:25
SELECT  DISTINCT TOP 100 (CAST(VarcharColumn as Date) as DateColumn)
FROM TABLE
Order by DateColumn desc 
0
LONG 4 जिंदा 2017, 00:30