sql - تحويل سكل أي شار إلى صفر 0




ssis transform (2)

لذلك أنا استكشاف جدول حيث وجدت اثنين من الحقول التي ينبغي أن تكون الأرقام، ولكن كمصدر هو ملف اكسل حتى الناس قد مختلطة بالفعل الحروف والرموز والأرقام.

أنا أحاول تنظيف هذه الحقول ولكن يمكنني العثور على أنواع كثيرة جدا من الرموز حتى الآن، لقد أجريت تنظيف مع بضع حالات مثل:

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 صفر.

هل تعرف الرجال كيف يمكنني القيام بذلك؟

شكر


أبدا ب

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, '')





transform