2013-05-06 78 views
2

TSQL我在我的表中有一个column文本(字符串),如19.57.14,但也只有19 分割字符串从

我想分割文本2列 1用“。”之前的所有文本。和“1”之后的所有文字。 。

对于条目没有 a 在字符串中,表格必须在第二列中有。所有数据也在之后。必须是2个字符长(填充0)。

例如19.5必须给出column1: 19 column2: 50; 必须给column1:11 column2:00 任何人都可以帮我使用正确的tsql-code吗?

回答

4

请尝试:

select 
    YourCol, 
    SUBSTRING(YourCol, 0, CHARINDEX('.', YourCol+'.')) Col1, 
    LEFT(SUBSTRING(YourCol, CHARINDEX('.', YourCol+'.')+1, 2)+'00', 2) Col2 
from YourTable 

select 
    YourCol, 
    CAST(YourCol AS INT) Col1, 
    RIGHT(PARSENAME(YourCol,1), 2) Col2 
from 
(
    select 
     CONVERT(NUMERIC(18,2), YourCol) YourCol 
    from YourTable 
)x 

样品:

declare @tbl as table(txt nvarchar(10)) 
insert into @tbl values ('19.5'), ('11'), ('7.14') 

select 
    txt, 
    SUBSTRING(txt, 0, CHARINDEX('.', txt+'.')) Col1, 
    LEFT(SUBSTRING(txt, CHARINDEX('.', txt+'.')+1, 2)+'00', 2) Col2 
from @tbl 

select 
    txt, 
    CAST(txt AS INT) Col1, 
    RIGHT(PARSENAME(txt,1), 2) Col2 
from 
(
    select 
     CONVERT(NUMERIC(18,2), txt) txt 
    from @tbl 
)x 
0
select cast(cast(number as float) as int) column1, 
right(cast(number as numeric(9,2)), 2) column2 
from 
(VALUES ('19.5'),('7.14'),('19'),('11')) t(number) 
0

试试这个,

Declare @InputList VARCHAR(8000), @Delimiter VARCHAR(8000); 
Declare @1stvalue nvarchar(20), @2ndValue Int; 

Set @InputList = '19.5'; 
Set @Delimiter = '.'; 

set @1stvalue = (select RTRIM(LTRIM(SUBSTRING(@InputList,1,CHARINDEX(@Delimiter,@InputList,0)-1)))); 

set @2ndValue = (Select RTRIM(LTRIM(SUBSTRING(@InputList,CHARINDEX(@Delimiter,@InputList,0)+LEN(@Delimiter),LEN(@InputList))))) 
set @2ndValue = (select case when @2ndValue < 10 then convert (varchar(10) ,convert (varchar(10),@2ndValue) + '0') else convert (varchar(10), @2ndValue) end); 

SELECT @1stvalue AS Column1, @2ndValue AS Column2; 

您可以使用此功能作为..