Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

यह जांचने का सबसे तेज़ तरीका है कि कोई वर्ण अंक है या नहीं?

मुझे बहुत आश्चर्य होगा यदि आप कभी भी WHERE col LIKE '[0-9]' के बीच किसी भी अंतर का पता लगाने में सक्षम होंगे। और कोई अन्य तरीका जो आप अपनाते हैं। लेकिन मैं डेनिस से सहमत हूं, इसे एक फ़ंक्शन में रखें ताकि आप अपने सभी कोड में लगातार एक ही चेक का उपयोग करें (या कम से कम, यदि आप बड़े स्कैन आदि के कारण यूडीएफ से बच रहे हैं, तो अपने कोड में एक मार्कर लगाएं जो होगा बाद में इसे व्यापक पैमाने पर बदलना आसान बनाएं).

उस ने कहा, आप निश्चित रूप से फ़ंक्शन के अंदर पार्स करने के लिए उपयोग की जाने वाली विधि की तुलना में स्केलर यूडीएफ का उपयोग करके अधिक प्रदर्शन हिट देखने जा रहे हैं। आपको वास्तव में CASE . का उपयोग करके UDF बनाम उस इनलाइन के प्रदर्शन की तुलना करनी चाहिए . उदा.

SELECT Postal = CONVERT(INT, CASE WHEN SUBSTRING(postal,2,1) LIKE '[0-9]' 
       THEN SUBSTRING(postal, 2,1) END)
FROM ...

इससे NULL प्राप्त होगा यदि वर्ण अंकीय नहीं है।

यदि आप केवल स्थानीय चरों की जांच के साथ काम कर रहे हैं, तो इससे कोई फर्क नहीं पड़ता कि आप किस पार्सिंग विधि का उपयोग करते हैं, और आप अपने अनुकूलन प्रयासों को कहीं और केंद्रित करने से बेहतर हैं।

संपादित करें प्रदर्शन के लिए सुझाव जोड़ना JOIN खंड। यह संभावित रूप से कम निरंतर स्कैन की ओर ले जाएगा, लेकिन बहुत अधिक पठनीय है (बहुत कम सबस्ट्रिंग कॉल आदि):

;WITH v AS 
(
    SELECT /* other columns, */ patientPostal, 
      ss = SUBSTRING(v.patientPostal,2,1),
      FROM [whatever table is aliased v in current query]
)
SELECT /* column list */
FROM [whatever table is aliased z in current query]
INNER JOIN v ON z.postal = CONVERT(INT, CASE 
    WHEN v.ss = '0' THEN ss
    WHEN v.ss LIKE '[1-9]' THEN LEFT(v.patientPostal, 3)
END);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टी-एसक्यूएल क्वेरी की आवश्यकता है सभी संभावित तरीके खोजें

  2. SQL सर्वर:अल्पविराम से अलग किए गए मान प्राप्त करने के लिए ग्रुप बाय क्लॉज

  3. लॉक एस्केलेशन - यहाँ क्या हो रहा है?

  4. SQL सर्वर में एक पहचान कॉलम में मान कैसे सम्मिलित करें

  5. डालने के दौरान सी # में एसक्यूएल अद्वितीय बाधा उल्लंघन पकड़ने का सबसे अच्छा तरीका