2011-06-02 37 views
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
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 
+0

您可能想要添加一个案例来将无变化转换为'RS' – 2011-06-02 01:16:32

+0

@Conrad Frix - 谢谢。错过了。 – 2011-06-02 01:20:45

+0

我一直在关注你过去一周的答案。真的很有帮助。喜欢从你那里学到更多东西。 – Sandeep 2011-06-02 02:29:57

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"; 
     } 
    } 
} 
0

您可以使用SQL-服务器字符串函数:

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

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

您可以创建一个正则表达式CLR装配这样one并在查询中指定要匹配的是什么。

可能比其他建议多一点工作,但你可以在别处重新使用程序集,如果你需要它。

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 

即使在货币符号和总和之间没有空格,这也可以工作。