我将一个txt文件导入到我的表列B中,该列是数据类型varchar 数据类似于10.00 GB,20 TB,100 MB等
column a column b
host A 100 TB
host B 20 GB
host C 100 MB
我确实尝试了convert(int,column name),返回错误建议无法将数据类型varchar转换为int类型
我可以用空格替换GB,但想要将任何用Tb或MB转换为GB的东西。是的,我不希望TB或GB或MB显示在我的专栏B.正在编号。
如果我可以将这些值存储在数据类型为int的单独列中,然后在同一个表中删除我的原始列,那么可能会很好。
请有人帮忙
答案 0 :(得分:3)
您可以使用以下方式拆分列:
select t.a, t.b,
cast(left(b, charindex(' ', b)) as int) as num,
right(b, 2) as units
from t;
这假设值都是这种格式。
您可以使用乘法将其放在一列中:
select t.a, t.b,
(cast(left(b, charindex(' ', b)) as float) *
(case right(b, 2) when 'GB' then 1.0
when 'TB' then 1024.0
when 'MB' then 1.0/1024
else 1.0
end)) as inGB
from t;
编辑:
如果所有值都不是您期望的格式,则可能会出现问题。您可以使用案例陈述,例如:
case when b like '[0-9] %' or b like '[0-9][0-9] %' or b like '[0-9][0-9][0-9] %' then . . .
验证数字实际上是在字符串的开头。
答案 1 :(得分:1)
由于我从txt文件导出,所以列包含这些值。 但是我仍然需要将所有TB的MB转换为GB,这就像普通类型。
我还需要找到每个主机的列b总和
理想情况下,我有分配给每个人的容量,我正在尝试找到每个主机的容量总和。
答案 2 :(得分:1)
我知道1000与1024不同,但根据您的确切需求,这是一个非常简单的方法:
select cast(ROUND(replace(replace(replace(columnB, ' TB', '000000000'), ' GB', '000000'), ' MB', '000') ,0,1) as int) from t
答案 3 :(得分:0)
将文件大小类型存储在单独的列中是不是最好
column a column b column c
host A 100 TB
host B 20 GB
host C 100 MB