4

テーブルに値が格納されている列があります

Cost

499.00
£ 7.75
£ 7.75
250.00
£ 5.99
$ 6.05

ここで、これらの値を次のような別のテーブルに保存する必要があります

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

Plzは私にこれを行う方法をクエリさせてください....

4

6 に答える 6

4
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
于 2011-06-02T01:14:36.430 に答える
0

このような正規表現 CLR アセンブリを作成し、クエリで何を照合するかを指定できます。

おそらく他の提案よりも少し手間がかかりますが、必要に応じて他の場所でアセンブリを再利用できます。

于 2011-06-02T01:27:13.947 に答える
0

これにはPerlを使用します...

#!/usr/bin/perl
use strict;
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";
        }
    }
}
于 2011-06-02T01:21:59.933 に答える
0

SQL-Server 文字列関数を使用できます。

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

# Amount
SELECT SUBSTRING(<value>, CHARINDEX(' ', <value>), LEN(<value>))
于 2011-06-02T01:23:48.067 に答える
0
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

これは、通貨記号と合計の間にスペースがない場合でも機能します。

于 2011-06-02T04:33:56.257 に答える