12

SQL で数値以外のフィールドから先頭のゼロを削除しようとするという興味深い問題に遭遇しました。(文字を含めることができるため、数値に変換してから戻すことはできません。)

最終的に使用したのは次のとおりです。

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

ゼロをスペースに置き換え、左にトリムしてから、ゼロを元に戻します。これは非常に巧妙で興味深い方法だと思いましたが、これまでに遭遇したことがない場合はそれほど読みにくいと思います。

これを行うためのより明確な方法はありますか?これを行うためのより効率的な方法はありますか? または、この期間を行う他の方法はありますか?私はこの問題に興味をそそられ、それを回避する方法を知りたいと思っていました。

4

2 に答える 2

11

最初のゼロ以外の文字を検索し、部分文字列を最後まで検索します (最大タイプには 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))
于 2010-03-16T20:15:01.850 に答える
0

TRIM 関数をチェックして ください http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes)
于 2010-03-16T20:00:22.457 に答える