SQL सर्वर Isnull रिटर्निंग 1900-01-01 जब फ़ील्ड शून्य है


15

DOB फ़ील्ड के शून्य होने पर कोड का निम्नलिखित टुकड़ा 1900-01-01 लौट रहा है। मैं चाहता था (और अपेक्षित) यह एक खाली स्ट्रिंग ('') वापस करने के लिए है, लेकिन यह नहीं है। मुझे अपने इच्छित परिणाम प्राप्त करने के लिए कैसे आगे बढ़ना चाहिए?

isnull(convert(date,DOB,1),'')

5
आप डेटा प्रकारों को बहुत अधिक मिला रहे हैं। अनिवार्य रूप से आप NULLतारीखों के साथ जो कर रहे हैं वह कह रहा है SELECT CAST('' AS DATE)। डेटा प्रकार क्या है DOB?
मार्क सिंकिनसन

1
यह एक varchar डेटा प्रकार है जिसे मैं आज तक परिवर्तित कर रहा हूं
Juan Velez

5
मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन यह ध्यान देने योग्य है कि ऐसा प्रतीत होता है जैसे कि आप एसक्यूएल में डेटा को फॉर्मेट करने की कोशिश कर रहे हैं, ताकि एप्लिकेशन लेयर आपके लिए इसे करने दे। 99.9% उस समय जब आप बेहतर होते हैं कि एप्लिकेशन लेयर को फ़ॉर्मेटिंग करते हैं।
एरिक

जवाबों:


21

आप एक रिक्त स्ट्रिंग प्राप्त नहीं कर सकते क्योंकि आप DATEमान प्रकार से वापस कर रहे हैं ISNULL

प्रति MSDN ,ISNULL

उसी प्रकार को लौटाता है जैसे check_expression। यदि एक शाब्दिक NULL को check_expression के रूप में प्रदान किया जाता है, तो प्रतिस्थापन_काले का डेटाटाइप लौटाता है। यदि एक शाब्दिक NULL चेक_ डेक्प्रेशन के रूप में प्रदान किया गया है और कोई रिप्लेसमेंट_वल्यू प्रदान नहीं किया गया है, तो एक इंट देता है।

यदि आप जाँच रहे हैं कि मान है या नहीं NULL, तो इसे किसी तिथि में परिवर्तित करने की कोई आवश्यकता नहीं है, जब तक कि आप एक तारीख मान वापस नहीं करना चाहते (जो आपको नहीं लगता)।

इसके बजाय, उपयोग करें:

SELECT ISNULL( DOB , '')

जो लौट आएगा

''

अगर मूल्य है NULL

एक NULLतारीख है NULL(कोई मूल्य नहीं)। दूसरी ओर, एक खाली स्ट्रिंग, मूल्यांकन करती है 0, जिसमें SQL सर्वर अव्यवस्थित रूप से एक पूर्णांक है जो दिनों की संख्या का प्रतिनिधित्व करता है 1900-01-01


-3

यदि आप DOB के लिए एक मान लौटा रहे हैं, जब यह आबादी है और कोई DOB आबादी नहीं होने पर अशक्त मान को हटा दें। आप यह कोशिश कर सकते हैं लेकिन DOB एक प्रकार का होगा और दिनांक प्रकार नहीं होगा।

isnull(cast(cast(DOB as date)as varchar),'') as DOB   (SQL SERVER)

2
VARCHARएक DATEऔर एक को वापस करने से कोई VARCHARमतलब नहीं है। जब आप उस बकवास को हटाते हैं, तो आपका उत्तर कम व्यय के साथ स्वीकृत उत्तर के समान होता है।
एरिक

हां, आपके परिदृश्य में इसका कोई अर्थ नहीं होगा, लेकिन जिस परिदृश्य में मैंने इसका उपयोग किया है, उसके लिए मैंने शुरुआत की datetimeऔर केवल तारीख की जरूरत थी YYYY-MM-DD। इसलिए dateसमय काटते हुए मैंने कास्टिंग की । फिर फ़ंक्शन varcharके उपयोग के लिए अनुमति देता है isnull। इसलिए मैं अभी भी आबादी वाले रिकॉर्ड के लिए एक तारीख प्राप्त करता हूं और अशक्त मूल्यों को हटा देता हूं। नहीं तो मुझे मिल रहा था 1900-01-01 00:00:00.000
एल्विस कैंडेलारिया

1
यह मेरा परिदृश्य नहीं है यह प्रश्न का परिदृश्य है। मेरा मानना ​​है कि इसीलिए आप नीचे वोट जमा कर रहे हैं। आप एक अलग सवाल का जवाब देने की कोशिश कर रहे हैं।
एरिक

हाँ आप सही है। मैंने वह गलत पढ़ा। मेरी गलती।
एल्विस कैंडेलारिया

-3

यह NULL डेट को स्पेस में बदल देगा। अनुप्रयोग परत (एक्सेल) अंतरिक्ष ठीक संभालती है

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

बस एक दृश्य बनाते हैं

बनाएं देखें test_view
AS
चयन मामला है जब साल (जन्म तिथि) <= 1900 जन्म तिथि के रूप में तो अशक्त किसी और जन्म तिथि अंत, sometext, परीक्षण से आईडी;

और फिर मूल तालिका के बजाय इसका उपयोग करें: test_view से * का चयन करें


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.