कुछ ऐसा चुनें जिसमें x वर्ण से अधिक / कम हो


109

सोच रहा था कि क्या ऐसा कुछ चुनना संभव है जिसमें SQL में x वर्णों से अधिक / कम हो।

उदाहरण के लिए, मेरे पास एक कर्मचारी तालिका है और मैं सभी कर्मचारी नामों को दिखाना चाहता हूं जिनके नाम में 4 से अधिक अक्षर हैं।

यहाँ एक उदाहरण तालिका है

ID EmpName Dept
1  Johnny  ACC
2  Dan     IT
3  Amriel  PR
4  Amy     HR

जवाबों:


181

यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो LEN(लंबाई) फ़ंक्शन का उपयोग करें :

SELECT EmployeeName FROM EmployeeTable WHERE LEN(EmployeeName) > 4

MSDN इसके लिए कहता है:

निर्दिष्ट स्ट्रिंग अभिव्यक्ति के वर्णों की संख्या लौटाता है,
जिसमें पीछे की ओर खाली स्थान होता है।

यहाँ MSDN का लिंक दिया गया है

Oracle / plsql के लिए आप उपयोग कर सकते हैं Length(), mysql भी लंबाई का उपयोग करता है।

यहाँ Oracle दस्तावेज़ है:

http://www.techonthenet.com/oracle/functions/length.php

और यहाँ का MySQL प्रलेखन है Length(string):

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_length

PostgreSQL के लिए, आप उपयोग कर सकते हैं length(string)या char_length(string)। यहाँ PostgreSQL प्रलेखन है:

http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-SQL


1
यौगिक असमानताओं के लिए, बस एक ANDकथन जोड़ें SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;
अलेक्जेंडरसिंगटन

28

जॉनह ने क्वेरी लिखने के तरीके पर बहुत अच्छी तरह से कवर किया है। एक और महत्वपूर्ण मुद्दा है जिसका उल्लेख भी किया जाना चाहिए, हालांकि, जो इस तरह के एक प्रश्न के प्रदर्शन की विशेषता है। आइए इसे यहां दोहराएं (Oracle के लिए अनुकूलित):

SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;

यह क्वेरी स्तंभ मान पर लागू LENGTHफ़ंक्शन के परिणाम ( फ़ंक्शन को लागू करने के परिणाम) को प्रतिबंधित कर रही हैEmployeeName । ओरेकल में, और शायद अन्य सभी आरडीबीएमएस में, इसका मतलब है कि EmployeeName पर एक नियमित सूचकांक इस प्रश्न का उत्तर देने के लिए बेकार होगा; डेटाबेस एक पूर्ण टेबल स्कैन करेगा, जो वास्तव में महंगा हो सकता है।

हालांकि, विभिन्न डेटाबेस एक फ़ंक्शन इंडेक्स सुविधा प्रदान करते हैं जो इस तरह के प्रश्नों को गति देने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, Oracle में, आप इस तरह एक सूचकांक बना सकते हैं:

CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));

यह अभी भी आपके मामले में मदद नहीं कर सकता है, हालांकि, हो सकता है कि सूचकांक आपकी स्थिति के लिए बहुत चयनात्मक न हो। इसके द्वारा मेरा मतलब निम्नलिखित है: आप उन पंक्तियों के लिए पूछ रहे हैं जहाँ नाम की लंबाई 4 से अधिक है। मान लें कि उस तालिका में 80% कर्मचारी नाम 4. से अधिक हैं। तब डेटाबेस के समापन की संभावना है ( सही ढंग से) यह सूचकांक का उपयोग करने के लायक नहीं है, क्योंकि यह संभवतः तालिका के अधिकांश ब्लॉकों को वैसे भी पढ़ना है।

हालाँकि, यदि आपने कहने के लिए क्वेरी को बदल दिया है LENGTH(EmployeeName) <= 4, या LENGTH(EmployeeName) > 35, यह मानते हुए कि बहुत कम कर्मचारियों के नाम 5 से कम वर्ण या 35 से अधिक हैं, तो सूचकांक उठाया जाएगा और प्रदर्शन में सुधार होगा।

वैसे भी, संक्षेप में: प्रश्नों की प्रदर्शन विशेषताओं से सावधान रहें, जैसे आप लिखने की कोशिश कर रहे हैं।


5

आज मैं db2 में वही कोशिश कर रहा था और नीचे इस्तेमाल किया गया था, मेरे मामले में मेरे पास varchar कॉलम डेटा के अंत में रिक्त स्थान थे

कर्मचारी का नाम चुनें जहां से कर्मचारी (TRIM (कर्मचारी))> 4;


0

यदि DB2 डेटाबेस को क्वेरी करते समय आपकी समस्या समान है, तो आपको नीचे दिए गए क्वेरी का उपयोग करना होगा।

SELECT * 
FROM OPENQUERY(LINK_DB,'SELECT
CITY,
cast(STATE as varchar(40)) 
FROM DATABASE')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.