जांचें कि स्ट्रिंग सही प्रारूप का पालन कर रही है या नहीं। सही प्रारूप इस प्रकार है: 0000/00000। अब तक मुझे यही मिला है:
declare @ID nvarchar = '0000/00000'
SELECT (case when len(@id) not between 1 and 12 OR @id not like( '[0-9][0-9][0-9][0-9]' + '/' + '[0-9][0-9][0-9][0-9][0-9]')
OR LEFT(@id,13) LIKE '%[0-9]&' then 'OK' else 'ERROR' end
2 जवाब
क्यों न केवल not like
का उपयोग करें?
where @id not like '[0-9][0-9][0-9][0-9]/[0-9][0-9][0-9][0-9][0-9]'
मुझे लगता है कि "0" का अर्थ है कि किसी भी अंक की अनुमति है।
WHERE @id = '0000/00000'
ढूंढ रहे हैं?!
सबसे पहले, यह एक समस्या होगी:
declare @ID nvarchar = '0000/00000'
यह:
declare @ID nvarchar = '0000/00000';
SELECT @ID LEN(@ID), DATALENGTH(@ID);
रिटर्न:
ID LEN
---- ----
0 1
इसे ध्यान में रखते हुए, ध्यान दें कि यह: PATINDEX({your pattern},@Id)
एक प्राकृतिक बूलियन परिणाम लौटाएगा।
DECLARE @ID1 NVARCHAR(1000) = '5555/12312',
@ID2 NVARCHAR(1000) = '1234/12345678',
@pattern VARCHAR(100) = '[0-9][0-9][0-9][0-9]/[0-9][0-9][0-9][0-9][0-9]';
SELECT IsCool = PATINDEX(@pattern,f.Id)
FROM (VALUES(@ID1),(@ID2)) AS f(Id);
रिटर्न:
IsCool
-----------
1
0
यदि, 0000/00000
से आपका मतलब है: चार अंक + "/" + पांच अंक तो ये सभी भाव काम करते हैं (ध्यान दें कि मैंने पैटर्न को क्लीनर के लिए एक चर बना दिया है, कोड पढ़ने में आसान है, इसकी आवश्यकता नहीं है):
DECLARE @ID NVARCHAR(1000) = '5555/12312',
@pattern VARCHAR(100) = '[0-9][0-9][0-9][0-9]/[0-9][0-9][0-9][0-9][0-9]';
SELECT CASE PATINDEX(@Pattern,@ID) WHEN 1 THEN 'Ok' ELSE 'Error' END;
SELECT IIF(PATINDEX(@Pattern,@ID)>0,'Ok','Error');
SELECT CHOOSE(PATINDEX(@Pattern,@ID)+1,'Error','Ok');
आपका कोड बताता है कि @ID 12 वर्णों तक लंबा हो सकता है। मान लें, उदाहरण के लिए, स्वीकार्य प्रारूप थे:
0000/00000
0000/000000
0000/0000000
तब आप यह कर सकते थे:
DECLARE @ID NVARCHAR(1000) = '5555/12312';
SELECT CASE WHEN LEN(@ID)<13 AND SIGN(PATINDEX('%[0-9][0-9]',@ID)) *
PATINDEX('[0-9][0-9][0-9][0-9]/[0-9][0-9][0-9][0-9][0-9]%',@ID) = 1
THEN 'Ok' ELSE 'Error' END;
दो अंतिम विचार:
LEN({string})
ऋणात्मक नहीं हो सकता; LEN(@ID) <13 ट्रिक करेगा- यदि अधिकतम लंबाई वास्तव में 12 है तो पैरामीटर या चर NVARCHAR(13) बनाएं। इस तरह, उदाहरण के लिए, कोई 8000 वर्ण स्ट्रिंग में गुजरता है, SQL को यह निर्धारित करने के लिए पूरी चीज़ को स्कैन करने की आवश्यकता नहीं है कि यह मान्य नहीं है।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।