2012-11-14 11 views
5

में किसी भी समय डेटाबेस में पंक्तियां खोजें परीक्षण के दौरान मैं कुछ आदेशों पर डेटाबेस में गलत तिथि/समय प्रविष्टि को नोटिस करने में विफल रहा हूं। तिथि और समय दर्ज करने के बजाय मैं केवल तारीख में प्रवेश कर रहा हूं। मैं सही समय टिकट createodbcdatetime(now()) का उपयोग कर रहा था हालांकि मैं डेटाबेस में प्रवेश करने के लिए cfsqltype="cf_sql_date" का उपयोग कर रहा था।डेटाटाइम कॉलम

मैं भाग्यशाली हूं कि ऑर्डर तिथि/समय सही ढंग से दर्ज किया गया हो, जिसका अर्थ है कि मैं आदेश दिनांक/समय क्षेत्र से समय का उपयोग कर सकता हूं।

मेरा प्रश्न यह है कि मैं तालिका में सभी पंक्तियों के लिए केवल तारीखों के साथ फ़िल्टर कर सकता हूं। मेरा डेटा नीचे;

तालिका का नाम: tbl_orders

uid_orders dte_order_stamp 
2000   02/07/2012 03:02:52 
2001   03/07/2012 01:24:21 
2002   03/07/2012 08:34:00 

तालिका का नाम: tbl_payments

uid_payment dte_pay_paydate  uid_pay_orderid 
1234   02/07/2012 03:02:52 2000 
1235   03/07/2012   2001 
1236   03/07/2012   2002 

मैं tbl_payments से प्रवेश किया कुछ ही समय के साथ सभी भुगतान का चयन करने में सक्षम होना चाहिए, मैं कर सकते हैं तो पाश मेरे ऑर्डर टेबल से समय को पकड़ने के परिणामों के आसपास इसे मेरी भुगतान तालिका से तारीख में जोड़ें और नई तिथि/समय के साथ फ़ील्ड अपडेट करें।

मैं तारीख/समय को पुनः सम्मिलित करने में बहुत अधिक संभाल सकता हूं। यह सिर्फ उन समय पंक्तियों का चयन कर रहा है जिनके बारे में मुझे यकीन नहीं है?

किसी भी मदद की सराहना की जाएगी।

निम्नलिखित

एसक्यूएल सर्वर 2008, शीत संलयन 9

SELECT 
    dbo.tbl_orders.uid_orders, 
    dbo.tbl_orders.dte_order_stamp, 
    dbo.tbl_payment.dte_pay_paydate, 
    dbo.tbl_payment.uid_pay_orderid 
    FROM 
    dbo.tbl_orders 
    INNER JOIN dbo.tbl_payment ON (dbo.tbl_orders.uid_orders = dbo.tbl_payment.uid_pay_orderid) 


    SELECT 
    dbo.tbl_orders.uid_orders, 
    dbo.tbl_orders.dte_order_stamp 
    FROM dbo.tbl_orders 

SELECT 
    uid_paymentid, 
    uid_pay_orderid, 
    dte_pay_paydate, 
FROM 
    dbo.tbl_payment 
+0

मई मैं पूछ सकता हूं कि आप इस जानकारी को दो स्थानों पर क्यों स्टोर करना चाहते हैं? बस सतह पर, मुझे लगता है कि मैं डेटा संरचना पर सवाल उठाऊंगा। – mikeY

+0

हाय माइकवाई कारण यह दो स्थानों पर है कि ग्राहक खाते पर भुगतान करने में सक्षम होंगे और भुगतान तिथि/समय व्यक्तिगत भुगतान रिकॉर्ड करेगा। हालांकि, मैं भाग्यशाली हूं कि ग्राहक ने अभी तक इसे शुरू नहीं किया है, और इसलिए आदेश के आदेश पर आदेश तय किए गए हैं, इसलिए मैं अब के लिए आदेश समय क्यों खींच सकता हूं। बाद की तारीख में ये लगभग निश्चित तारीखों और समय के लिए लगभग होंगे। –

+0

ठीक है। समझा। सिर्फ इसलिए कि ऑर्डर तिथि के बराबर tbl_payments में निपटान की तारीख का मतलब यह नहीं है कि यह हमेशा होगा। और ग्राहक एक्स संभावित रूप से आदेश # 2001 के लिए tbl_payments में एक से अधिक भुगतान कर सकता है। स्पष्टीकरण के लिए धन्यवाद। मैं बिलकुल उत्सुक था। – mikeY

उत्तर

6

उन रिकॉर्ड्स का चयन करें जहां घंटे, मिनट, सेकंड और मिलीसेकंड मान शून्य है।

select * 
from table 
where datePart(hour, datecolumn) = 0 
and datePart(minute, datecolumn) = 0 
and datePart(second, datecolumn) = 0 
and datePart(millisecond, datecolumn) = 0 
+0

हाय नाथन, यह पूरी तरह से काम किया! धन्यवाद! –

6

दोनों आदेश और भुगतान के लिए और अगर वे शामिल हो गए करने की आवश्यकता बयानों का चयन है। (बस FYI) आप शायद उन प्राप्त कर सकते हैं time को casting द्वारा मूल्यों और 0 के लिए जाँच:

SELECT * FROM table WHERE CAST(datetimecolumn AS TIME) = '00:00' 

कि विशेष रूप से प्रभावी है, हालांकि नहीं हो सकता है, कैसे स्मार्ट एसक्यूएल की सेवा पर निर्भर करता है आर इंडेक्स हैं।

+0

+1 'time' का अच्छा उपयोग :) – Leigh

+0

उम्म ... इस कोड को चलाने पर मुझे समय लगता है कि टिनिंट के साथ असंगत है? फ़ील्ड निश्चित रूप से डेटाटाइम पर सेट है? –

+1

एचएम को '= 0' के बजाय' = '00: 00'' या ऐसा कुछ करने की आवश्यकता हो सकती है। मेरे पास परीक्षण करने के लिए SQL सर्वर की एक प्रति नहीं है। –

3

कुछ इस तरह काम करना चाहिए:

.... 
WHERE CAST(CONVERT(VARCHAR, dbo.tbl_payment.dte_pay_paydate, 101) AS DATETIME) = 
      dbo.tbl_payment.dte_pay_paydate 

यह सभी पंक्तियों जहां समय याद आ रही है वापस आ जाएगी।

+0

यह अतिरिक्त = हटाए गए (लेघ के सुझाव के अनुसार) के साथ काम करता है धन्यवाद। –

+1

एफवाईआई, उत्तर छोटे टाइपो को सही करने के लिए अद्यतन किया गया। – Leigh

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