2010-05-25 13 views
6

एक स्तंभ समय के लिए दिनांक मान और एक दूसरे क्षेत्र है कि एक डाटाबेस परिणाम के लिए आईआईएस लॉग आयात करने के लिए logparser का उपयोग करते हुए गठबंधन करने के लिए:TSQL एक दिनांक फ़ील्ड और एक समय क्षेत्र

2010-05-25 00:00:00.000 

और

2010-01-01 11:11:58.000 

मैं after insert ट्रिगर को कोड करना चाहता हूं जो 2 फ़ील्ड को जोड़ती है।

उत्तर

6

यदि कोई और इस धागे पर ठोकर खाता है (या यदि मूल पोस्टर अभी भी इस उत्तर का उपयोग कर सकता है), तो LogParser में TO_TIMESTAMP (दिनांक, समय) फ़ंक्शन देखें, जो आपको एक समय के साथ एक दिनांक-समय टाइमस्टैम्प को जोड़ता है केवल एक पूर्ण टाइमस्टैम्प मूल्य में टाइमस्टैम्प ... और आपको डीबी में कनवर्ट करने से बचाता है ...

18

यदि आप SQL Server 2008 या बाद में उपयोग कर रहे हैं, तो आप उन्हें DATE और TIME डेटाटाइप पर कास्ट करने के बाद केवल दो मान जोड़ सकते हैं। यहां एक उदाहरण दिया गया है।

declare @datet datetime; 
set @datet = GETDATE(); 

select 
    @datet, 
    cast(@datet as date), 
    cast(@datet as time); 

select 
    cast(cast(@datet as date) as datetime), 
    cast(cast(@datet as time) as datetime), 
    cast(cast(@datet as date) as datetime) + cast(cast(@datet as time) as datetime); 
+0

दिनांक और समय डेटाटाइप्स के रूप में एक स्ट्रिंग से पदों खींच की तुलना में बहुत क्लीनर लगता है। 08 से नया, आप कहते हैं। तो आपको मुझे पहले 9 गज की दूरी मिल गई है - मैं तालिका में सभी पंक्तियों को अपडेट कर सकता हूं - मैं केवल डाली गई पंक्तियों को कैसे अपडेट करूं - कम से कम मुझे लगता है कि मुझे thx – justSteve

+0

के बजाय 'INSERT BEFORE' को देखना चाहिए यदि आप ट्रिगर से पूरी तरह से बच सकते हैं और इसके बजाय एक गणना कॉलम के रूप में तालिका में एक और कॉलम जोड़ सकते हैं। आप इस तरह के कथन का उपयोग करके ऐसा कर सकते हैं: वैकल्पिक टैबलेट एडीडी डेट एंडटाइम (कास्ट (कास्ट (@ डेटेट तिथि के रूप में) डेटटाइम के रूप में) + कास्ट (कास्ट (@ डेटेट समय के रूप में) डेटाटाइम के रूप में); –

+0

मेरे मामले में मेरे पास एक स्थिर समय था जिस पर मैं काम करना चाहता था और समय के हिस्से में भीतरी कलाकारों से बचने में सक्षम था। तो कास्ट (कास्ट (some_date_col तिथि के रूप में) डेटटाइम + कास्ट ('11: 59: 59 अपराह्न 'डेटाटाइम के रूप में) ने शानदार काम किया और थोड़ा और संक्षिप्त था। Ymmv – jinglesthula

1

इस प्रयास करें:

DECLARE @Date varchar(23) 
     ,@Time varchar(23) 
     ,@Both datetime 

SELECT @Date='2010-05-25 00:00:00.000' 
     ,@Time='2010-01-01 11:11:58.000' 

SELECT @Both=LEFT(@Date,10)+' '+RIGHT(@Time,12) 

SELECT @Both 

उत्पादन:

----------------------- 
2010-05-25 11:11:58.000 

(1 row(s) affected) 

सेट आधारित:

DECLARE @INSERTED table(RowID int, DateOf varchar(23), TimeOf varchar(23), DateTimeOf datetime) 

INSERT @INSERTED VALUES (1,'2010-05-25 00:00:00.000','2010-01-01 11:11:58.000',null) 
INSERT @INSERTED VALUES (2,'2010-04-05 00:00:00.000','2010-01-01 12:34:56.789',null) 
INSERT @INSERTED VALUES (3,'2010-03-15 00:00:00.000','2010-01-01 01:01:01.000',null) 


UPDATE @INSERTED 
    SET DateTimeOf=LEFT(DateOf,10)+' '+RIGHT(TimeOf,12) 

SELECT * FROM @INSERTED 

उत्पादन:

RowID DateOf     TimeOf     DateTimeOf 
------- ----------------------- ----------------------- ----------------------- 
1  2010-05-25 00:00:00.000 2010-01-01 11:11:58.000 2010-05-25 11:11:58.000 
2  2010-04-05 00:00:00.000 2010-01-01 12:34:56.789 2010-04-05 12:34:56.790 
3  2010-03-15 00:00:00.000 2010-01-01 01:01:01.000 2010-03-15 01:01:01.000 

(3 row(s) affected) 
0

यदि आपके पास आउटपुट को नए कॉलम में जोड़ने का विकल्प है, तो आप यह नया कॉलम भी बना सकते हैं एक गणना कॉलम और उन 2 कॉलम (एक डिजाइन समय पर) को गठबंधन करने के लिए परिभाषित करें।

देव

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