मैं SQL सर्वर में एक निश्चित तारीख से अधिक सभी तिथियों के लिए कैसे क्वेरी कर सकता हूं?


338

मैं कोशिश कर रहा हूँ:

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;

A.Date की तरह लगता है: 2010-03-04 00:00:00.000

हालांकि, यह काम नहीं कर रहा है।

क्या कोई इसके लिए एक संदर्भ प्रदान कर सकता है?


17
इसके चारों ओर एकल उद्धरण
डालें

2
उद्धरण के अलावा, मैं हमेशा तारीख-केवल स्ट्रिंग शाब्दिक के लिए एक सुरक्षित और अस्पष्ट प्रारूप का उपयोग करने की सलाह देता हूं। मुझे केवल एक ही भरोसा YYYYMMDD है। दाऊद के जवाब के लिए मेरी टिप्पणी देखें कि क्यों ...
हारून बर्ट्रेंड

जवाबों:


486
select *  
from dbo.March2010 A 
where A.Date >= Convert(datetime, '2010-04-01' )

आपकी क्वेरी में, 2010-4-01एक गणितीय अभिव्यक्ति के रूप में माना जाता है, इसलिए संक्षेप में यह पढ़ा जाता है

select *  
from dbo.March2010 A 
where A.Date >= 2005; 

( 2010 minus 4 minus 1 is 2005 इसे उचित रूप में बदलना datetime, और एकल उद्धरण का उपयोग करने से यह समस्या ठीक हो जाएगी।)

तकनीकी रूप से, पार्सर आपको दूर जाने की अनुमति दे सकता है

select *  
from dbo.March2010 A 
where A.Date >= '2010-04-01'

यह आपके लिए रूपांतरण करेगा, लेकिन मेरे विचार से यह DateTimeरखरखाव प्रोग्रामर के लिए स्पष्ट रूप से परिवर्तित करने की तुलना में कम पठनीय है जो आपके बाद आएगा।


37
स्पष्ट रूप से रूपांतरित होना आवश्यक नहीं है। इसके अलावा, मैं YYYYMMDD के बजाय YYYY-MM-DD का उपयोग करने की अत्यधिक सलाह देता हूं। क्यों? खैर, अपने कोड के साथ प्रयास करें SET LANGUAGE FRENCH। :-) उस तारीख के लिए आपको 1 अप्रैल के बजाय 4 जनवरी मिलेगा। अन्य तारीखों के लिए आपको इसके बजाय एक त्रुटि मिल सकती है।
आरोन बर्ट्रेंड

4
@ एर्टन बर्टेंट - मेरे जवाब में यह शामिल था कि रूपांतरण आवश्यक नहीं है, "तकनीकी रूप से शुरू होने के साथ, पार्सर आपको <अंतिम कोड नमूने के साथ दूर जाने दे सकता है। मुझे बस यह अधिक पठनीय लगता है, क्योंकि यह स्पष्ट रूप से स्पष्ट है कि यह है। दिनांक-समय। बहुत सारे डेटाबेस सिस्टम एक वर्चर फ़ील्ड में दिनांक मानों को संग्रहीत करते हैं, लेकिन आप प्रारूप के बारे में सही हैं। आम तौर पर, रूपांतरण का उपयोग करते समय मैं प्रारूप विनिर्देशक में भी जोड़ता हूं, लेकिन मैं अपने नमूने को अपने ऊपर से कर रहा था। सिर।
डेविड

1
@AaronBertrand, मुझे उपरोक्त उत्तर के साथ संयोजन में आपके सुझाव का उपयोग करना था: CONVERT(datetime, '20100401 10:01:01')- 2010-04-01 SQL सर्वर प्रबंधन स्टूडियो में काम करता है, लेकिन PHP / MSSQL के माध्यम से SQL कथन भेजते समय नहीं।
पेपरक्लिप

मुझे लगता है कि यह स्पष्ट है कि यह एक तारीख है, और इस प्रकार रूपांतरण आवश्यक नहीं है।
जैक्स मैथ्यू

56

अपनी तिथि को वर्ण स्ट्रिंग में संलग्न करने का प्रयास करें।

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';

2
समय जोड़ने से सटीक परिणाम मिलेगा: जहाँ A.Date> = 2014-01-12 12:28:00
shaijut

16

हम नीचे की तरह भी उपयोग कर सकते हैं

SELECT * 
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';

SELECT * 
    FROM dbo.March2010 A
    WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';

2
फ़िल्टर विधेय स्तंभ को संशोधित करना एक अच्छा विचार नहीं है। यह सूचकांक उपयोग को लगभग पूरी तरह से रोकता है।
pimbrouwers

3
DateTime start1 = DateTime.Parse(txtDate.Text);

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

पहले टेक्सबॉक्स को डेटाटाइम में कन्वर्ट करें .... फिर उस वेरिएबल को क्वेरी में उपयोग करें


3

यह सब योग करने के लिए, सही उत्तर है:

select * from db where Date >= '20100401'  (Format of date yyyymmdd)

यह अन्य भाषा प्रणालियों के साथ किसी भी समस्या से बचाएगा और सूचकांक का उपयोग करेगा।

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