2011-08-27 14 views
6
SELECT * FROM dbname WHERE text = 'a%' 
(this can get all the `text` fields which begin with the letter "a".) 

लेकिन फ़ील्ड कैसे प्राप्त करें जहां पहला अक्षर! = [A-z]?php mysql क्वेरी पहला अक्षर! = [ए-जेड]

उदाहरण के लिए

:

\"hello\" // this first letter begin as \ not range in a-z 
いけ // also first letter not begin range in a-z 
... 
may also have a white space as the first character. 

तो आप परिणामों के इन सभी प्रकार के प्राप्त करने के लिए php mysql क्वेरी का उपयोग कर सकते हैं जहां पहले अक्षर !=[a-z]?

उत्तर

8

इस प्रयास करें:

SELECT * FROM dbname WHERE text REGEXP '^[^a-zA-Z]'; 

है कि अगर आप इसे केस संवेदी (अपरकेस या लोअरकेस) होना चाहता हूँ। आप बड़े अक्षरों को A से Z तो अनुमति देना चाहते हैं तो बस का उपयोग करें:

SELECT * FROM dbname WHERE text REGEXP '^[^a-z]'; 

अनिवार्य रूप से नियमित अभिव्यक्ति किसी भी स्ट्रिंग है कि पत्र स्ट्रिंग की शुरुआत में a-z नहीं है से मेल खाते हैं कहते हैं।

2

उपयोग REGEXP/RLIKE:,

SELECT * FROM dbname WHERE LEFT(text, 1) NOT BETWEEN 'a' AND 'Z'; 

इस regexp का उपयोग कर से अधिक तेजी से होना चाहिए, क्योंकि MySQL क्वेरी के बीच सूचक का उपयोग कर सकते हैं:

SELECT * FROM dbname WHERE text REGEXP '^[^a-z]' 
1

एक गैर regexp समाधान का उपयोग करने BETWEEN है , जबकि यह REGEXP प्रश्नों पर नहीं हो सकता है।

हालांकि, मेरे पास कोई मानक उपलब्ध नहीं है, हालांकि परीक्षण करने के लिए कठिन नहीं होना चाहिए।

+0

MySQL टेक्स्ट पर इंडेक्स का उपयोग नहीं करेगा क्योंकि आपने इसे फ़ंक्शन में लपेट लिया है। माइस्क्ल के लिए जहां पर एक इंडेक्स का उपयोग करने के लिए आपको कथन में तुलना में अनुक्रमित फ़ील्ड को अलग करना होगा। – Riedsio

+0

@Riedsio आपका क्या मतलब है? 'बाएं' सूचकांक का उपयोग कर सकते हैं। – alexn

संबंधित मुद्दे