sql - एसक्यूएल कन्वर्ट किसी भी चार शून्य शून्य करने के लिए




ssis transform (3)

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

मैं इन क्षेत्रों को साफ करने की कोशिश कर रहा हूं लेकिन मैं इतने सारे प्रतीकों को पा सकते हैं ताकि वर्तमान में, मैंने कुछ मामलों के साथ सफाई का प्रदर्शन किया है जैसे:

SELECT
    CASE 
       WHEN Montant_Devise LIKE '%Free%' THEN '0'
       WHEN Montant_Devise LIKE ' ' THEN '0'
       WHEN Montant_Devise = '' THEN '0' 
       WHEN Montant_Devise = '-' THEN '0' 
       ELSE CAST(COALESCE(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(Montant_Devise, '€', ''), ' ', ''), ',', '.'))), '0') AS DECIMAL(20,2))
    END
FROM
    [dbo].[table_BI]

तो, यह सौदा यहाँ है कि संभवत: मुझे भविष्य में नए प्रतीकों से बचने की तुलना में बचने की तुलना में मेरे मामले में नए प्रतीक शामिल हो सकते हैं, मैं यह जानना चाहूंगा कि मैं कैसे प्रतिस्थापित कर सकता हूं, कोई भी प्रतीक या पत्र डिफ़ॉल्ट 0 शून्य से नहीं है।

क्या आप लोग जानते हैं कि मैं यह कैसे कर सकता हूं?

धन्यवाद


Answers

के साथ शुरू

CASE WHEN patindex(Montant_Devise  '%[^0-9]%' > 0 '0'

फिर खाली स्ट्रिंग करते हैं। फिर अपना और करो।


फ़ंक्शन के बिना मुझे ऐसा करने का कोई तरीका दिखाई नहीं देता, जो प्रदर्शन पर मारने वाला है उस ने कहा, वहाँ बहुत से बाहर हैं यहाँ एक है।

CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @strText) > 0
    BEGIN
        SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '0')
    END
    RETURN @strText
END

अमल में लाना

declare @table table (x varchar(64) )
insert into @table
values
('332148790832473487...DFSKDJFH&#@[email protected]#'),
('0X0C0V1234')

update t
set x = dbo.RemoveNonNumericCharacters(t.x)
from @table t

select * from @table

रिटर्न

x
33214879083247348700000000000000000
0000001234

वैकल्पिक रूप से, फ़ंक्शन में आप केवल बदलकर गैर-संख्यात्मक को निकाल सकते हैं

STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '0')

सेवा मेरे...

STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')


मैं इसे केवल जोड़ता हूं ताकि आप इसे लिखने का एक त्वरित तरीका देख सकें ताकि आप यह जांच सकें कि अपडेट करने से पहले क्या अपडेट किया जाएगा।

UPDATE Table 
SET  Table.col1 = other_table.col1,
     Table.col2 = other_table.col2 
--select Table.col1, other_table.col,Table.col2,other_table.col2, *   
FROM     Table 
INNER JOIN     other_table 
    ON     Table.id = other_table.id 






sql ssis transform