Extraire séparément les caractères numériques et spéciaux

J'ai colonne dans un tableau avec des valeurs stockées comme

Cost 499.00 £ 7.75 £ 7.75 250.00 £ 5.99 $ 6.05 

Maintenant, j'ai besoin de stocker ces valeurs à une autre table comme

 Currency Cost RS 499.00 £ 7.75 £ 7.75 RS 250.00 £ 5.99 $ 6.05 

Plz laissez-moi la question comment faire cela ….

     insert DestinationTable(Cost, Currency) select case when delimiterIndex > 0 then left(Cost, delimiterIndex) else 'RS' end as Currency, right(Cost, len(Cost) - delimiterIndex) as Cost from ( select charindex(' ', Cost) delimiterIndex, * from SourceTable ) tt 

    J'utiliserais Perl pour ça …

     #!/usr/bin/perl use ssortingct; use warnings; open(FH,"<data.txt"); my @lines=<FH>; print "Currency"."\t"."Cost\n"; foreach my $line (@lines){ $line=~s/\n//g; if($line ne ""){ my @split1=split(/\s+/,$line); if($split1[0]=~m/[0-9.]/){ print "\t".$split1[0]."\n"; }else{ print $split1[0]."\t".$split1[1]."\n"; } } } 

    Vous pouvez utiliser les fonctions de string SQL-Server:

     # Currency SELECT SUBSTRING(<value>, 1, CHARINDEX(' ', <value>)) # Amount SELECT SUBSTRING(<value>, CHARINDEX(' ', <value>), LEN(<value>)) 

    Vous pouvez créer un assembly CLR regex comme celui- ci et spécifier dans votre requête sur quoi faire correspondre.

    Probablement un peu plus de travail que les autres suggestions, mais vous pouvez réutiliser l'assemblage ailleurs si vous en avez besoin.

     SELECT Currency = COALESCE(NULLIF(LEFT(Cost, CostStart - 1), ''), 'RS'), Cost = SUBSTRING(Cost, CostStart, LEN(Cost) - CostStart + 1) FROM ( SELECT Cost, CostStart = PATINDEX('%[0-9]%', Cost) FROM atable ) s 

    Cela fonctionnera même s'il n'y a pas d'espace entre le symbole monétaire et la sum.