अगर कोई स्ट्रिंग की शुरुआत में कई पात्रों हो सकता है, के लिए उदाहरण 'M10', 'MTR10', 'ABCD50', 'JL8', etc...
जैसे, आपको मूल रूप से किसी संख्या की पहली स्थिति से नाम का सबस्ट्रिंग प्राप्त करना होगा।
दुर्भाग्यवश MySQL उस प्रकार के REGEXP ऑपरेशन का समर्थन नहीं करता है (केवल एक बूलियन मान लौटाया जाता है, वास्तविक मिलान नहीं)।
आप इस समाधान का उपयोग कर सकते हैं यह अनुकरण करने के लिए:
SELECT name
FROM tbl
ORDER BY CASE WHEN ASCII(SUBSTRING(name,1)) BETWEEN 48 AND 57 THEN
CAST(name AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,2)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,1)
WHEN ASCII(SUBSTRING(name,3)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,2)
WHEN ASCII(SUBSTRING(name,4)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,3)
WHEN ASCII(SUBSTRING(name,5)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,4)
WHEN ASCII(SUBSTRING(name,6)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,5)
WHEN ASCII(SUBSTRING(name,7)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,6)
WHEN ASCII(SUBSTRING(name,8)) BETWEEN 48 AND 57 THEN
SUBSTRING(name,1,7)
END,
CASE WHEN ASCII(SUBSTRING(name,1)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,1) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,2)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,2) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,3)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,3) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,4)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,4) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,5)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,5) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,6)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,6) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,7)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,7) AS UNSIGNED)
WHEN ASCII(SUBSTRING(name,8)) BETWEEN 48 AND 57 THEN
CAST(SUBSTRING(name,8) AS UNSIGNED)
END
यह तो स्ट्रिंग के निकाले संख्या भाग के रूप में लंबे समय के रूप में वहाँ पर < = 7 चरित्र, पहली स्ट्रिंग के चरित्र हिस्सा द्वारा आदेश देगा स्ट्रिंग की शुरुआत। यदि आपको और ज़्यादा चाहिए, तो आप CASE
कथन में अतिरिक्त WHEN
से श्रृंखला का चयन कर सकते हैं।
http://stackoverflow.com/a/153642/1013082 – MetalFrog
वहाँ हमेशा केवल स्ट्रिंग की शुरुआत में एक पत्र होगा? –
http://stackoverflow.com/a/12257917/2008111 – caramba