मेरे पास एक ही समस्या है और यह निर्धारित किया गया है कि यह समस्या उत्पन्न होती है क्योंकि SQL सर्वर एक समान तरीके से पूर्णांक में परिवर्तित वर्णों पर तुलना नहीं करता है। मेरे परीक्षण में, मैंने पाया है कि परिवर्तित वर्णों की कुछ तुलनाएं, जैसे कि विस्मयादिबोधक बिंदु, प्रकार रूपांतरण त्रुटियों को लौटा देगा, जबकि परिवर्तित वर्णों की अन्य तुलनाओं, जैसे कि अंतरिक्ष, सीमा से बाहर होना निर्धारित किया जाएगा।
यह नमूना कोड विभिन्न संभावित परिदृश्यों का परीक्षण करता है और नेस्टेड रिप्ले स्टेटमेंट का उपयोग करके एक समाधान प्रस्तुत करता है। REPLACE निर्धारित करता है कि क्या स्ट्रिंग में कोई वर्ण हैं जो अंक या स्लैश नहीं हैं, और, यदि कोई मौजूद है, तो स्ट्रिंग की लंबाई शून्य से अधिक होगी, जिससे यह संकेत मिलता है कि 'बुरे' वर्ण हैं और दिनांक अमान्य है ।
DECLARE @str varchar(10)
SET @str = '12/10/2012'
IF convert(int, substring(@str,4,2)) <= 31 AND convert(int, substring(@str,4,2)) >= 1
PRINT @str+': Passed Test'
ELSE PRINT @str+': Failed Test'
GO
DECLARE @str varchar(10)
SET @str = '12/10/2012'
PRINT 'Number of characters in ' + @str + ' that are not numerals or a slash (0 means the date is valid; all values greater than 0 indicate a problem): ' + convert(varchar(5),len(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@str,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''), '8',''),'9',''),'/',''),' ','+')))
PRINT ''
GO
DECLARE @str varchar(10)
SET @str = '12/!0/2012'
IF convert(int, substring(@str,4,2)) <= 31 AND convert(int, substring(@str,4,2)) >= 1
PRINT @str+': Passed Test'
ELSE PRINT @str+': Failed Test'
GO
DECLARE @str varchar(10)
SET @str = '12/!0/2012'
PRINT 'Number of characters in ' + @str + ' that are not numerals or a slash (0 means the date is valid; all values greater than 0 indicate a problem): ' + convert(varchar(5),len(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@str,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''), '8',''),'9',''),'/',''),' ','+')))
PRINT ''
GO
DECLARE @str varchar(10)
SET @str = '12/ /2012'
IF convert(int, substring(@str,4,2)) <= 31 AND convert(int, substring(@str,4,2)) >= 1
PRINT @str+': Passed Test'
ELSE PRINT @str+': Failed Test'
GO
DECLARE @str varchar(10)
SET @str = '12/ /2012'
PRINT 'Number of characters in ' + @str + ' that are not numerals or a slash (0 means the date is valid; all values greater than 0 indicate a problem): ' + convert(varchar(5),len(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@str,'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''), '8',''),'9',''),'/',''),' ','+')))
आउटपुट: