SQL2000,求个 SQL 语句,各位看看

zhangjing1979666 2014-05-07 01:29:43
【直径】【壁厚】两个字段,都是numeric类型,2位小数,数据例如:

直径 壁厚
10 5
10.10 5.2
10.00 5.20

我想得到一个新的列,【规格】,数据是:
10*5
10.1*5.2
10*5.2
...全文
183 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2014-05-08
  • 打赏
  • 举报
回复

-- convert 使用两次,第一次转换成 float ,这个不带后面的0 ,第二次转成 varchar 。再拼接你的结果 
-- 大概如下,我没有测试,LZ 研究一下。
drop table mytable 
go
create table mytable(a numeric(10,2),b numeric(10,2))
go
insert into mytable values(10,5)
insert into mytable values(10.10,5.2)
insert into mytable values(10,5.2)
go
select * from mytable 
go
select a,b, convert(varchar(10),convert(float,a)) + '*' + convert(varchar(30),convert(float,b))  from mytable
go

zhangjing1979666 2014-05-08
  • 打赏
  • 举报
回复
引用 13 楼 wmxcn2000 的回复:

-- convert 使用两次,第一次转换成 float ,这个不带后面的0 ,第二次转成 varchar 。再拼接你的结果 
-- 大概如下,我没有测试,LZ 研究一下。
drop table mytable 
go
create table mytable(a numeric(10,2),b numeric(10,2))
go
insert into mytable values(10,5)
insert into mytable values(10.10,5.2)
insert into mytable values(10,5.2)
go
select * from mytable 
go
select a,b, convert(varchar(10),convert(float,a)) + '*' + convert(varchar(30),convert(float,b))  from mytable
go

结果正确,谢谢
發糞塗牆 2014-05-07
  • 打赏
  • 举报
回复
另外,没有内置函数可以直接实现你这个需求
發糞塗牆 2014-05-07
  • 打赏
  • 举报
回复
1、我建议统一数据类型,不然在编写SQL的时候,要进行类型隐式转换,影响性能。而且展示的时候假设是向右对齐,那么可能就一长一短,看得很怪。 2、你这个要转的话,需要做最少两次判断,第一次判断最后一位是否为0,第二次是倒数第二位是否为0,为0还要去除小数点
zhangjing1979666 2014-05-07
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
[quote=引用 6 楼 zhangjing1979666 的回复:] [quote=引用 5 楼 DBA_Huangzj 的回复:] 你是要保留*这个?
1、我要的那个结果是个字符串,不是乘出来的结果 2、直径、壁厚,这两个字段是 numeric 类型,2位小数,例如:直径 10.00,壁厚 5.01,我想要得到结果 10*5.01,而不是 10.00*5.01[/quote]处理起来很复杂,为什么要这样做?[/quote] 1、因为数据库现在就是这个样子的,我要计算出一列【规格】=【直径】*【壁厚】,但是【直径】【壁厚】有可能是2位小数,也有可能是不带小数的 2、现在问题就是,怎么把 10.00,10.10,这种数据,变成 10,10.1
zhangjing1979666 2014-05-07
  • 打赏
  • 举报
回复
引用 7 楼 chz415767975 的回复:
select RTrim(CAST([直径] AS NUMERIC(4,0)))+'*'+Rtrim([壁厚]) from huang
你结果是错的
發糞塗牆 2014-05-07
  • 打赏
  • 举报
回复
引用 6 楼 zhangjing1979666 的回复:
[quote=引用 5 楼 DBA_Huangzj 的回复:] 你是要保留*这个?
1、我要的那个结果是个字符串,不是乘出来的结果 2、直径、壁厚,这两个字段是 numeric 类型,2位小数,例如:直径 10.00,壁厚 5.01,我想要得到结果 10*5.01,而不是 10.00*5.01[/quote]处理起来很复杂,为什么要这样做?
霜寒月冷 2014-05-07
  • 打赏
  • 举报
回复
select RTrim(CAST([直径] AS NUMERIC(4,0)))+'*'+Rtrim([壁厚]) from huang
zhangjing1979666 2014-05-07
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
你是要保留*这个?
1、我要的那个结果是个字符串,不是乘出来的结果 2、直径、壁厚,这两个字段是 numeric 类型,2位小数,例如:直径 10.00,壁厚 5.01,我想要得到结果 10*5.01,而不是 10.00*5.01
發糞塗牆 2014-05-07
  • 打赏
  • 举报
回复
你是要保留*这个?
zhangjing1979666 2014-05-07
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-05-07 13:37:20
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
--	Apr  2 2010 15:48:46 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[HUANG]
if object_id('[HUANG]') is not null drop table [HUANG]
go 
create table [HUANG]([直径] numeric(4,2),[壁厚] numeric(3,2))
insert [HUANG]
select 10,5 union all
select 10.10,5.2 union all
select 10.00,5.20
--------------生成数据--------------------------

select *,CAST([直径]*[壁厚] AS NUMERIC(4,2)) AS [规格]
 from [HUANG]
----------------结果----------------------------
/* 
直径                                      壁厚                                      规格
--------------------------------------- --------------------------------------- ---------------------------------------
10.00                                   5.00                                    50.00
10.10                                   5.20                                    52.52
10.00                                   5.20                                    52.00

*/
感谢回复,你的结果跟我要的不一样
zhangjing1979666 2014-05-07
  • 打赏
  • 举报
回复
引用 1 楼 u013756007 的回复:
select convert(varchar(10),直径)+'*'+convert(varchar(10),壁厚) from 表名
你的结果是这样的,不是我要的结果 10.00*5.00 10.10*5.20 10.00*5.20
發糞塗牆 2014-05-07
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-05-07 13:37:20
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
--	Apr  2 2010 15:48:46 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[HUANG]
if object_id('[HUANG]') is not null drop table [HUANG]
go 
create table [HUANG]([直径] numeric(4,2),[壁厚] numeric(3,2))
insert [HUANG]
select 10,5 union all
select 10.10,5.2 union all
select 10.00,5.20
--------------生成数据--------------------------

select *,CAST([直径]*[壁厚] AS NUMERIC(4,2)) AS [规格]
 from [HUANG]
----------------结果----------------------------
/* 
直径                                      壁厚                                      规格
--------------------------------------- --------------------------------------- ---------------------------------------
10.00                                   5.00                                    50.00
10.10                                   5.20                                    52.52
10.00                                   5.20                                    52.00

*/
1988525 2014-05-07
  • 打赏
  • 举报
回复
select convert(varchar(10),直径)+'*'+convert(varchar(10),壁厚) from 表名

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧