SQL:如何在字段上进行替换''

时间:2017-12-07 15:53:02

标签: sql sql-server sql-server-2012

对你们我有一个非常棘手的问题。所以,听我在我的一个表列中有一个带空格和数字的字段。关键部分是在十进制字段中转换内容。缺点基本上是对于某些行我可以得到类似的东西:

    ' 1584.00 '
    ' 156546'
    '545.00 '
    '    '

所以,为了清理我的专栏,我做了一个LTRIM和RTRIM所以空间不见了。所以现在对于记录只是空格的几个记录,新内容是''。最后我需要将此结果转换为小数。

问题:对于只争用空格的字段,新结果是''而且我无法在此处应用REPLACE,因为它是空白,下面的代码不起作用:

SELECT REPLACE('','','0')

-- Final current verison
SELECT CAST(COALESCE(REPLACE(REPLACE([Gross_Weight],' ','0'),',',''),'0') AS DECIMAL(13,3))

我怎么能搞清楚?

非常感谢

3 个答案:

答案 0 :(得分:1)

SELECT COALESCE(NULLIF(MyColumn, ''), 0)

这有副作用,您也可以将NULL值转换为0,这可能是您不想要的。如果这是一个问题,那么一个简单的CASE语句应该可以解决这个问题:

SELECT CASE WHEN MyColumn = '' THEN 0 ELSE CAST(MyColumn AS DECIMAL(10, 4)) END

显然,你还必须加入你已经在做的任何其他操作。

答案 1 :(得分:1)

无需替换,只需将零连接到列,例如

SELECT RTRIM('0' + LTRIM(column))

答案 2 :(得分:0)

我假设您的数据在表格中。 让我们称这个表'DATA'和'VALUE'列 然后您可以使用以下查询

UPDATE DATA SET VALUE = 0 where VALUE = ''

要选择值,请执行以下操作

select case  ltrim(rtrim([Gross_Weight])) when ''
   THEN 0
   ELSE ltrim(rtrim([Gross_Weight])) END

如果我的要求错误,请告诉我。