कारण मैं इस तरह के दृश्य उपलब्ध हैं:कहां देखें उर्फ पर त्रुटि
SELECT location, CAST(SUBSTRING(location, 9, 4) AS int) AS ProcessCode
FROM dbo.asset
WHERE (status NOT IN ('INACTIVE', 'NOT READY', 'LIMITEDUSE'))
AND (location LIKE '[1-6]-[12]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-_')
तो मैं इसे इस तरह कहते हैं, यह काम करता है:
SELECT * FROM FooView
हालांकि, अगर मैं एक कहां खंड जोड़ें:
:Conversion failed when converting the varchar value '-01-' to data type int.
SELECT * FROM FooView WHERE ProcessCode > 0
मैं इस त्रुटि मिलती है
क्यों? चूंकि स्थान 1-2-100-0800-A
प्रारूप में होना चाहिए, इसलिए मुझे नहीं लगता कि रूपांतरण त्रुटि कैसे हो सकती है। क्या यह संभव है कि CAST
WHERE
से पहले विफल रहता है परिणाम फ़िल्टर करने का मौका? यदि हां, तो पहली क्वेरी क्यों काम करती है?
संपादित करें - काम के आसपास
मैं सिर्फ एक सह कार्यकर्ता का सुझाव एक अच्छा काम के आसपास था। यह काम करता है, लेकिन यह अभी भी व्याख्या नहीं करता है कि प्रारंभिक समस्या क्यों है।
यह ProcessCode के लिए चयन में है:
CASE WHEN location LIKE '[1-6]-[12]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-_'
THEN CAST(SUBSTRING(location, 9, 4) AS int) ELSE 0 END AS ProcessCode,
ब्याज से एसक्यूएल सर्वर का कौन सा संस्करण? और कॉलम प्रकार क्या स्थान है? –
एसक्यूएल सर्वर 2012. स्थान वक्रार (24) है। –