删除sql server表中列中的前导零,

时间:2014-09-19 10:57:33

标签: sql sql-server

我的问题与此非常相似:

SE Question

但是我想在表上运行查询,并实际更新该表中的值,而不仅仅是选择它们。

我不确定如何选择值,然后在不使用for循环的情况下更新它。

我可以运行什么查询来执行此操作?

{编辑:}

我将数字值存储为varchar,导入我运行导入的数字,如00233 我希望它是233

3 个答案:

答案 0 :(得分:2)

因此,请调整update的查询:

update table t
    set ColumnName =  substring(ColumnName, patindex('%[^0]%', ColumnName), 10);

答案 1 :(得分:1)

你的问题有点模糊,因为你没有详细说明为什么要选择然后更新,因为这个答案可能对你没用。然而..

在UPDATE语句中,您可以根据列值设置列值。我的意思是,如果你有" 00001A"在ColA,并希望它是" 1A"你可以(主要是从链接问题中回答)

UPDATE MyTable SET ColA =  substring(ColA, patindex('%[^0]%',ColA), 10)

首次通过此代码会将00001A的任何出现更改为1A,并且后续运行它不会与PATINDEX匹配,因此请忽略该值。

如果这不是您所追求的目标,请更多地扩展问题,希望您能获得更多帮助。

答案 2 :(得分:1)

如果所有列都是数字,请使用:

UPDATE table
SET col =  cast(cast(col as int) as varchar(10))
WHERE col like '0%'

如果某些值不是数字

UPDATE table
SET col = stuff(@a, 1, patindex('%[^0]%', @a) - 1, '')
WHERE col like '0%'