我有一个表列存储为提取数字和特殊字符分别
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让我查询如何做到这一点....
我有一个表列存储为提取数字和特殊字符分别
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让我查询如何做到这一点....
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
我会用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";
}
}
}
您可以使用SQL-服务器字符串函数:
# Currency
SELECT SUBSTRING(<value>, 1, CHARINDEX(' ', <value>))
# Amount
SELECT SUBSTRING(<value>, CHARINDEX(' ', <value>), LEN(<value>))
您可以创建一个正则表达式CLR装配这样one并在查询中指定要匹配的是什么。
可能比其他建议多一点工作,但你可以在别处重新使用程序集,如果你需要它。
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
即使在货币符号和总和之间没有空格,这也可以工作。
您可能想要添加一个案例来将无变化转换为'RS' – 2011-06-02 01:16:32
@Conrad Frix - 谢谢。错过了。 – 2011-06-02 01:20:45
我一直在关注你过去一周的答案。真的很有帮助。喜欢从你那里学到更多东西。 – Sandeep 2011-06-02 02:29:57