【问题标题】:Algorithms to trim leading zeroes from a SQL field?从 SQL 字段中修剪前导零的算法?
【发布时间】:2010-03-16 19:51:19
【问题描述】:

我刚刚遇到了一个有趣的问题,即尝试从 SQL 中的非数字字段中修剪前导零。 (因为它可以包含字符,所以它不能只是转换为数字然后再返回。)

这是我们最终使用的:

SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0')

它用空格替换零,然后修剪它,然后将零放回原处。我认为这是一种非常聪明和有趣的方法,尽管如果你以前从未遇到过它,它的可读性就不那么好了。

有没有更清晰的方法来做到这一点?有没有更有效的方法来做到这一点?或者任何其他方式来做这个时期?我对这个问题很感兴趣,并有兴趣了解解决它的任何方法。

【问题讨论】:

  • 如果字段从不包含以空格开头的空格
  • @John - 是的。在这种情况下,它不会。它是一个 ID 字段,可以包含字母或数字。
  • 嗯,我希望能得到更多答案。真的没有其他方法可以做到这一点吗?

标签: sql-server trim


【解决方案1】:

找到第一个非零字符,子字符串结束(最大类型可以放 20 亿个)

LTRIM 是可选的,真的

DECLARE @MyVar varchar(8000)

SET @MyVar = '000foobar'
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000))
SET @MyVar = '000000  oh my lord'
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000))

【讨论】:

  • 哇。好的。谢谢......我自己永远也想不出这个,我仍然害怕模式和正则表达式。 :)
【解决方案2】:

查看TRIM函数 http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes)

【讨论】:

  • 酷。不过,它似乎不起作用 - 我收到语法错误。这是 SQL 的新功能吗?我正在使用 SQL Server 2005
  • MS-SQL 不支持 SQL99 语法;不过应该适用于其他 sql server 类型
  • 我也用 SQL Server 试过了,但还是不行。不过,我刚刚尝试过的另一个 DBMS 支持它。
  • @Mark Wilkins - 哪个? (只是出于兴趣)
  • @froadie:它是 Advantage 数据库服务器。我是它的开发人员之一(偏见警报)。具有讽刺意味的是,直到我看到这个问题,我才意识到我们支持这种特殊的 TRIM 语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2017-07-13
  • 2021-04-16
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多