2010-03-16 8 views
12

मैं एसक्यूएल में एक गैर-संख्यात्मक क्षेत्र से अग्रणी शून्यों को ट्रिम करने की कोशिश करने की दिलचस्प समस्या में आया। (चूंकि यह वर्ण हो सकते हैं, यह सिर्फ एक संख्या में बदला नहीं जा सकता है और फिर वापस।)एसक्यूएल फ़ील्ड से अग्रणी शून्यों को ट्रिम करने के लिए एल्गोरिदम?

इसी को हम का उपयोग कर समाप्त हो गया है:

SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0') 

यह रिक्त स्थान के साथ शून्य की जगह, ट्रिम्स छोड़ दिया यह, और फिर शून्य को वापस रखता है। मैंने सोचा कि यह करने के लिए यह एक बहुत चालाक और दिलचस्प तरीका था, हालांकि अगर आप पहले कभी नहीं आते हैं तो इतना पठनीय नहीं है।

क्या ऐसा करने के कोई स्पष्ट तरीके हैं? ऐसा करने के लिए और अधिक कुशल तरीके? या इस अवधि को करने के किसी अन्य तरीके? मैं इस समस्या से चिंतित था और इसके आसपास होने के किसी भी तरीके को देखने में दिलचस्पी होगी।

+1

चालाक अगर फ़ील्ड में कभी भी – John

+0

@ जॉन - सच से शुरू करने के लिए कोई स्थान नहीं है। इस मामले में यह नहीं है। यह एक आईडी फ़ील्ड है जिसमें अक्षरों या संख्याएं हो सकती हैं। – froadie

+0

हम्मम्म मैं अधिक उत्तरों की उम्मीद कर रहा था। क्या ऐसा करने के लिए वास्तव में कोई और तरीका नहीं है? – froadie

उत्तर

11

1 गैर शून्य चरित्र का पता लगाएं, समाप्त करने के लिए सबस्ट्रिंग (रख सकते हैं अधिकतम प्रकारों के लिए 2 अरब)

LTRIM, वैकल्पिक है वास्तव में

DECLARE @MyVar varchar(8000) 

SET @MyVar = '000foobar' 
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000)) 
SET @MyVar = '000000 oh my lord' 
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000)) 
+0

वाह। अच्छा लगा। धन्यवाद ... मैं कभी भी इस के साथ नहीं आ सकता था, मैं अभी भी पैटर्न और नियमित अभिव्यक्ति से डर रहा हूं। :) – froadie

+0

PATINDEX/LIKE RegEx की तुलना में काफी सरल है ... – gbn

0

चेक बाहर TRIM समारोह http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes) 
+0

कूल। यह काम नहीं कर रहा है, हालांकि - मुझे एक वाक्यविन्यास त्रुटि मिलती है। क्या यह एसक्यूएल की एक नई सुविधा है ...? मैं SQL सर्वर 2005 – froadie

+0

का उपयोग कर रहा हूं एमएस-एसक्यूएल इसके लिए SQL99 सिंटेक्स का समर्थन नहीं करता है; अन्य एसक्यूएल सर्वर प्रकारों के लिए काम करना चाहिए, हालांकि – John

+0

मैंने SQL सर्वर के साथ भी कोशिश की और यह काम नहीं किया। यह एक और डीबीएमएस में समर्थित है जिसे मैंने अभी कोशिश की है। –

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

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