語句
select 'K'+substring(cast([收費起點樁號]as char),0,charindex('.', cast([收費起點樁號]as char)))+'+'+substring(cast([收費起點樁號]as char),charindex('.', cast([收費起點樁號]as char))+1,4) as 收費起點樁號
from tb_fs_公路收費站分布情況表
返回的結(jié)果是正確的,假如[收費起點樁號]是200.020 ,則結(jié)果為K200+020,如果[收費起點樁號]是310.520,則結(jié)果為
K310+520。
但是我把合成字符串的提取為函數(shù)再調(diào)用(select CovertToStakeNO([收費起點樁號]) from tb_fs_公路收費站分布情況表 )后,結(jié)果卻非預(yù)期值:如果[收費起點樁號]是200.020,則返回2,如果[收費起點樁號]是310.520,則返回3。函數(shù)體如下:
-- Description: 將real型的樁號轉(zhuǎn)換為樁號形式
alter function CovertToStakeNO
(
@StakeNOColumnName real
)
RETURNS nchar
AS
BEGIN
declare @tostring nchar (10);
declare @indexofpoint int;
set @tostring = (select cast(@StakeNOColumnName as char) );
set @indexofpoint=charindex('.',@tostring );
return @tostring --('K'+substring(@tostring,0,@indexofpoint)+'+'+substring(@tostring ,@indexofpoint+1,4))
END
GO
最終改為:
alter function CovertToStakeNO
(
@StakeNOColumnName decimal(8,3)
)
RETURNS nchar(20)
AS
BEGIN
declare @tostring nchar (20);
declare @indexofpoint int;
set @tostring = (select cast(@StakeNOColumnName as char) );
set @indexofpoint=charindex('.',@tostring );
return @tostring --('K'+substring(@tostring,0,@indexofpoint)+'+'+substring(@tostring ,@indexofpoint+1,4))
END
GO
出錯原因:
1)使用CHAR/VARCHAR要定義長度,不然默認長度為1,也就是為什么得到1個字符的原因
2)[收費起點樁號]數(shù)據(jù)類型錯了,不是real ,而是decimal(8,3)
select 'K'+substring(cast([收費起點樁號]as char),0,charindex('.', cast([收費起點樁號]as char)))+'+'+substring(cast([收費起點樁號]as char),charindex('.', cast([收費起點樁號]as char))+1,4) as 收費起點樁號
from tb_fs_公路收費站分布情況表
返回的結(jié)果是正確的,假如[收費起點樁號]是200.020 ,則結(jié)果為K200+020,如果[收費起點樁號]是310.520,則結(jié)果為
K310+520。
但是我把合成字符串的提取為函數(shù)再調(diào)用(select CovertToStakeNO([收費起點樁號]) from tb_fs_公路收費站分布情況表 )后,結(jié)果卻非預(yù)期值:如果[收費起點樁號]是200.020,則返回2,如果[收費起點樁號]是310.520,則返回3。函數(shù)體如下:
-- Description: 將real型的樁號轉(zhuǎn)換為樁號形式
alter function CovertToStakeNO
(
@StakeNOColumnName real
)
RETURNS nchar
AS
BEGIN
declare @tostring nchar (10);
declare @indexofpoint int;
set @tostring = (select cast(@StakeNOColumnName as char) );
set @indexofpoint=charindex('.',@tostring );
return @tostring --('K'+substring(@tostring,0,@indexofpoint)+'+'+substring(@tostring ,@indexofpoint+1,4))
END
GO
最終改為:
alter function CovertToStakeNO
(
@StakeNOColumnName decimal(8,3)
)
RETURNS nchar(20)
AS
BEGIN
declare @tostring nchar (20);
declare @indexofpoint int;
set @tostring = (select cast(@StakeNOColumnName as char) );
set @indexofpoint=charindex('.',@tostring );
return @tostring --('K'+substring(@tostring,0,@indexofpoint)+'+'+substring(@tostring ,@indexofpoint+1,4))
END
GO
出錯原因:
1)使用CHAR/VARCHAR要定義長度,不然默認長度為1,也就是為什么得到1個字符的原因
2)[收費起點樁號]數(shù)據(jù)類型錯了,不是real ,而是decimal(8,3)

