求教一个ms sql一个转换字符串为INT的写法

猴子我是唐僧啊 2018-11-06 05:47:45
表A有如下数据:
ID var
1 ‘1.2’
2 '10/60'
3 '0.5'
4 '15/60'

数据结构:id int; var char
想要的结果如下:
id var
1 72
2 10
3 30
4 15

-------------
将字段中含有/的取'/'前面的数字转换为float,如果没有/就直接乘以60转换为float。
折腾了一下午都没找到方法。望大神们指点。

...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iiiiiiiii_z 2018-11-07
  • 打赏
  • 举报
回复
get√,有学习了一个函数
  • 打赏
  • 举报
回复
两位真是大神啊。。。。
吉普赛的歌 2018-11-06
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	id INT IDENTITY(1,1) PRIMARY KEY,
	n VARCHAR(50)	
)
GO
INSERT INTO t VALUES ('1.2');
INSERT INTO t VALUES ('10/60');
INSERT INTO t VALUES ('0.5');
INSERT INTO t VALUES ('15/60');

SELECT *,CASE 
			WHEN CHARINDEX('/',n)>1 THEN CAST(SUBSTRING(n,1,CHARINDEX('/',n)-1) AS FLOAT) 
			ELSE CAST(n AS FLOAT)*60 
         END  AS r
FROM t

二月十六 2018-11-06
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] int,[var] CHAR(20))
Insert #T
select 1,N'1.2' union all
select 2,N'10/60' union all
select 3,N'0.5' union all
select 4,N'15/60'
Go
--测试数据结束

--更新操作
UPDATE
#T
SET
[var] = CASE
WHEN CHARINDEX('/', [var]) = 0
THEN RTRIM(CONVERT(FLOAT, [var]) * 60)
ELSE
SUBSTRING([var], 1, CHARINDEX('/', [var]) - 1)
END;

--读取测试结果
SELECT * FROM #T


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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