खैर, कोई TRY_CONVERT()
नहीं है या TRY_CAST()
एसक्यूएल-सर्वर 2008 में, लेकिन आप एक्सएमएल की आंतरिक कास्ट को अशक्त प्रकारों में उपयोग कर सकते हैं।
इसे आजमाएं
DECLARE @tbl TABLE(SomeInt VARCHAR(100));
INSERT INTO @tbl VALUES('123')
,('blah') --bad data
SELECT t.*
,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int')
FROM @tbl t;
थोड़ा सा हैक... लेकिन किसी तरह सुंदर;-)
कुछ स्पष्टीकरण
CAST('' AS XML)
असली XML प्राप्त करने के लिए बस एक तरकीब है एक्सएमएल के मूल तरीकों का उपयोग करने के लिए। sql:column()
एक XQuery
है -फंक्शन, जो आपको एक सेट के कॉलम को XQuery
. में शामिल करने की अनुमति देता है (sql:variable
का उपयोग करें चर के लिए)।
cast as xs:int?
स्ट्रिंग को इंट-वैल्यू के रूप में पार्स करने का प्रयास करेगा और यदि यह काम नहीं करता है तो NULL लौटाएगा।
सीमा है:यह हमेशा आपके सिस्टम के डिफ़ॉल्ट (TRY_CAST
के समान) का उपयोग करेगा ) TRY_CONVERT
. के साथ तीसरे पैरामीटर के साथ आउटपुट पर आपका अधिक नियंत्रण होगा...
संकेत:XQuery/Xpath
सख्ती से केस-संवेदी है। तो xs:dateTime?
. है , लेकिन आपको xs:datetime
. के साथ एक त्रुटि मिलेगी ...