您的位置:程序门 -> ms-sql server -> 基础类



请教数据类型转换的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教数据类型转换的问题
发表于:2007-08-02 23:18:43 楼主
字段   xo(varchar(25))
数据如下
2*3
2.5*2
10.5*6
0.8*3
我想把*号前面的数据转换成如下格式,类型还用varchar
不用临时表直接在select中
有没有什么更有效的方法,我转的过程感觉太麻烦了

020
025
105
008
发表于:2007-08-02 23:28:181楼 得分:0
left( '0 '+left((cast(left(b.xo,charindex( '* ',b.xo)-1)*10.0   as   varchar(10))),charindex   ( '. ',(cast(left(b.xo,charindex( '* ',b.xo)-1)*10.0   as   varchar(10))))-1)+ '0 ',3)
这是我写的代码,总感觉不是很好太长了
发表于:2007-08-02 23:56:222楼 得分:0

declare   @str   varchar(20)
set   @str= '10.5*6 '

select   right( '000 '+cast(cast(left(@str,charindex( '* ',@str)-1)   as   float)*10   as   varchar),3)
发表于:2007-08-03 21:41:543楼 得分:0
还有更好的吗?
发表于:2007-08-04 11:10:284楼 得分:0
要用存储过程实现,把字符串当作表达式
也可用游标

EXEC(列的内容)
发表于:2007-08-04 11:25:445楼 得分:0
如果小數的位數固定為一位的話

select   right(1000   +   cast(left(xo,   charindex( '* ',   xo)   -   1)   *   10.0   as   int),   3)   from   b
发表于:2007-08-04 11:26:346楼 得分:0
--創建測試環境
create   table   b   (xo   varchar(25))
insert   b   select   '2*3 '
union   all   select   '2.5*2 '
union   all   select   '10.5*6 '
union   all   select   '0.8*3 '
go
--測試
select   right(1000   +   cast(left(xo,   charindex( '* ',   xo)   -   1)   *   10.0   as   int),   3)   as   xo   from   b
go
--刪除測試環境
drop   table   b
--結果
/*
xo
020
025
105
008
*/
发表于:2007-08-04 20:02:267楼 得分:0
多谢多谢,长见识了...
发表于:2007-08-04 20:04:068楼 得分:0
鱼的再转换为varchar就是我所想要的结果了

--創建測試環境
create   table   b   (xo   varchar(25))
insert   b   select   '2*3 '
union   all   select   '2.5*2 '
union   all   select   '10.5*6 '
union   all   select   '0.8*3 '
go
--測試
select   cast   (right(1000   +   cast(left(xo,   charindex( '* ',   xo)   -   1)   *   10.0   as   int),   3)   as   varchar(3))   as   xo   from   b
go
--刪除測試環境
drop   table   b


快速检索

最新资讯
热门点击