2009-05-28 12 views
14

एसक्यूएल चयन में ट्रैक कैच ब्लॉक का उपयोग करना संभव है?एक चयन वक्तव्य में एक कनवर्टर पर कैच करें

उदाहरण के लिए इस के समान सामान के लिए:

select 
    order, 
    CONVERT(DATETIME, orderDate) 
from orders 

इस परिदृश्य से निपटने का सबसे अच्छा तरीका क्या है?

+2

तो IsDate सच है, तो आप यह एक भूमिका के लिए चुना जा सकता है दिनांक समय। यह IsDate का मुद्दा है। – cjk

+0

@ जॉन इडोल: "मानक" से आपका क्या मतलब है। आईएसओ एक उदाहरण के लिए एक मानक है। ऑर्डरडेट के लिए अलग-अलग प्रारूप क्या हैं? – Sung

+0

क्षमा करें - मैं उलझन में था - IsDate ठीक है! – JohnIdol

उत्तर

20

मैं कोशिश पकड़ के बारे में पता नहीं है, लेकिन एसक्यूएल सर्वर में आप ISDATE समारोह है और वहाँ के लिए की तरह कुछ कर सकते हैं

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END 
+0

काम नहीं करता है अगर आदेश दिनांक VarChar – Cherven

+6

क्या होता है यदि दिनांक प्रारूप अलग है? – Asher

1

आप समारोह ISDATE() का उपयोग कर सकते हैं:

SELECT ISDATE('11/13/2009') 
SELECT ISDATE('13/11/2009') 
2

चयन खंड में, नहीं।

आप हालांकि ISDATE()

select 
    order, 
    CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END 
from orders 
1

का उपयोग कर मुझे नहीं लगता कि एक कोशिश पकड़-चुने अंदर संभव है, लेकिन बाहर जब आप संग्रहित प्रक्रियाओं के साथ काम कर रहे हैं संभव है एक तिथि के लिए परीक्षण कर सकते हैं।

begin try 
    select cast(strartnr as int) from table 
end try 
begin catch 
    select 10000 from table 
end catch 
10

एमएस एसक्यूएल सर्वर में 2012 नए निर्माण करता है कि वास्तव में क्या करने के लिए कहा जाता है है:


SELECT 
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed' 
    ELSE 'Cast succeeded' 
END AS Result; 
    GO 

भी देखें http://msdn.microsoft.com/en-us/library/hh230993.aspx

+2

वास्तव में अच्छा एक्सडी लेकिन यह सिर्फ एसक्यूएल 2012 में काम करता है, है ना? – MaikaDalila

+0

@ मिकादालिला: ठीक है। – user10633

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