【发布时间】:2019-02-22 13:06:20
【问题描述】:
我正在使用的 SQL Server 2014 中有一个字段,如下所示:
**RawField**
20060202
20060323
我想添加一个拆分字段并添加一个小数点并创建一个数字字段。这是我希望看到的:
**RawField**
200602.02
200603.23
所以我需要拆分字段,添加小数点,然后转换为数值。我尝试了一些代码,但出现错误。请参阅下面的代码:
select top 1000 cast(SUBSTRING(cast(RawField as varchar(6)),1,6) + cast('.' as varchar(1)) + SUBSTRING(cast(RawField as varchar(2)),6,2) as int)
from Table
我收到以下错误:
Msg 245, Level 16, State 1, Line 11
Conversion failed when converting the varchar value '200602.' to data type int.
这是一个好方法吗?
【问题讨论】:
-
列的原始类型是什么,没有所有的演员表? (另外,这可能是一个伪装得很差的
DATE,而不是任何数字?) -
你为什么要将
200602.02转换为 INT? -
@JeroenMostert 最初它是一个 varchar(50)。这是一个文本文件的文件转储
-
什么版本的SQL Server(2012+有
PARSE,这里可以和STUFF一起使用),你在找什么样的“数值字段”?DECIMAL(8, 2)将是显而易见的选择,但这与转换为INT相矛盾。如果您只想在值中添加一个句点,但将其保留为字符串,那将是STUFF的简单应用,但就数据库而言,结果不会真正是“数字”。 -
@JeroenMostert 谢谢!我认为你完美地击中了它。我更喜欢 DECIMAL(8,2)。我遇到了问题,所以我只是尝试使用 INT 来尝试代码。我刚刚写了 CAST(STUFF(RawField, 7, 0, '.') AS DECIMAL(8,2)) 并得到了我的答案!
标签: sql sql-server data-analysis data-manipulation