2012-06-03 19 views
8

मैं आज बनाई गई सभी पंक्तियां प्राप्त करने में असमर्थ हूं। मैंने getdate(), Cast, Convert इत्यादि जैसे कई कार्यों का उपयोग किया है, लेकिन सभी व्यर्थ हैं।आज बनाई गई सभी पंक्तियां प्राप्त करना

यह मेरा मूल प्रश्न है:

SELECT timeId 
FROM table_roaster_time_table 
WHERE (user_id = @user_id) AND (DATEDIFF(d, date, GETDATE()) = 0) 

मैं मेज table_roaster_time_table जहां userid उपलब्ध कराया जाएगा से timeId प्राप्त करना चाहते हैं और तिथि आज है।

मैं यह कैसे कर सकता हूं?

+0

इसका कोई उपयोग नहीं है। मैंने urs उत्तरों दोनों की कोशिश की है। लेकिन डेटटाइप मैंने डेट के लिए सेट किया है डेटटाइम है। एक और बात यह है कि मैं '6/01/2012' जैसे स्थिर मूल्य का उपयोग नहीं कर सकता क्योंकि मैं दैनिक आधार पर roasters के समय सारिणी सेट करना चाहता हूं और इसके लिए मैं दैनिक वर्तमान दिनांक चाहता हूं। मैंने दिन (दिनांक) = दिन (getdate() भी उपयोग किया है, लेकिन यह काम नहीं कर रहा है और टाइमिड के लिए शून्य मान प्राप्त करता है, लेकिन मेरे पास पहले से 2 रिकॉर्ड हैं 1 में 3/6/2012 है और दूसरे के पास 2/6 है/2012 दिनांक और रिकॉर्ड – iConfused

+3

क्या आप सुनिश्चित हैं कि "3/6/2012" 3 जून है और 6 मार्च नहीं है? –

+1

आपको आरक्षित (और बहुत अस्पष्ट) शब्दों जैसे कि 'date' जैसे कॉलम नामों के उपयोग से बचने चाहिए।' Create_date' लंबा है लेकिन यह एक आरक्षित कीवर्ड से बचाता है और उस कॉलम में डेटा का बेहतर वर्णन करता है। –

उत्तर

22

आदेश [date] स्तंभ पर एक सूचकांक का उपयोग करने का कोई मौका रखने के लिए (भले ही आज मौजूद नहीं है, यह भविष्य में हो सकता है), की कोशिश:

AND [date] >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)) 
AND [date] < DATEADD(DAY, 1, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)); 

आप एसक्यूएल उपयोग कर रहे हैं सर्वर 2008 या बेहतर है, तो आप कोड को छोटा करने, लेकिन अभी भी [date] पर एक सूचकांक का उपयोग कर कुछ इस तरह कर सकते हैं, यदि कोई मौजूद:

AND CONVERT(DATE, [date]) = CONVERT(DATE, CURRENT_TIMESTAMP); 

संपादित

जब से तुम उलझन में होना करने के लिए क्यों 3/6/2012 है 6 वीं मार्च और नहीं 3rd जून लगता है, मैं भी सुझाव दे सकता है कि मैन्युअल डेटाबेस में '3/6/2012' तरह अस्पष्ट तारीख शाब्दिक डालने के बजाय, आप स्तंभ एक डिफ़ॉल्ट के रूप में करते हैं:

ALTER TABLE dbo.table_roaster_time_table 
    ALTER COLUMN [date] DATETIME NOT NULL; 

ALTER TABLE dbo.table_roaster_time_table 
    ADD CONSTRAINT df_date DEFAULT (CURRENT_TIMESTAMP) 
    FOR [date]; 

आप तारीख शाब्दिक डालने के लिए जा रहे हैं तो कम से कम एक सुरक्षित और स्पष्ट प्रारूप, इस तरह के YYYYMMDD के रूप में उपयोग:

INSERT dbo.table_roaster_time_table([date]) VALUES('20120603'); 

अब कोई भ्रम है।

+0

+1 मैं समय भाग को कम करने के लिए CONVERT (DATE, x) का उपयोग करना चाहता हूं, हालांकि – usr

+0

@usr मुझे नहीं पता कि ओपी 'DATE' का उपयोग कर सकते हैं क्योंकि SQL सर्वर का कोई संस्करण निर्दिष्ट नहीं किया गया था। जब संदेह में मैं हमेशा निम्न का उपयोग करने के लिए याद रखने की कोशिश करता हूं टी आम denominator (यह 2012 के माध्यम से 2012 और 2005 पर काम करेगा)। –

+0

@AaronBertrand +1। ब्याज से, क्या 'GetDate() 'पर' CURRENT_TIMESTAMP' का उपयोग करने का कोई फायदा है? – Bridge

संबंधित मुद्दे