2012-01-12 119 views
0

我必須比較兩個格式不同的char(4)。因此我想要一種格式,以便與其他格式進行比較。基本上我需要刪除前綴零和尾隨空格(如果存在)。刪除所有前綴指定的字符和後綴空間

例如:

的字符:

'001 ''1'都應該比較'1'格式化

'001A''1A'後都應該格式化

'010 ''10'後比較'1A'應兩者相比'10'格式化

'010A''10A'後都應該比較'10A'格式化

'100 ''100'後都應該比較'100'格式化

'100A'格式化

select Replace(Ltrim(Replace(Rtrim(@charToBeFormatted), '0', ' ')), ' ', '0') 

看來以後應該比較'100A'後工作,但感到很浪費將字符串放置兩次,它根本不會使意圖清晰。

可以以更高效和/或優雅的方式實現結果嗎?

+0

@Benoit [LTRIM](http://msdn.microsoft.com/en-us/library/ms177827.aspx)和[RTRIM ](http://msdn.microsoft.com/en-us/library/ms178660.aspx)不採取第二個參數。 – 2012-01-12 18:08:41

+0

@JoeStefanelli呃,不知道你的意思。示例中的LTRIM和RTRIM都只有一個參數。你能詳細說明嗎? (可能是由於缺乏可讀性/清晰意圖而強調的問題?_?) – steenhulthin 2012-01-12 18:31:49

+0

我回復了@Benoit發佈的內容,他之後刪除了該內容。 – 2012-01-12 18:37:23

回答

1

是應該是一個數字的結果?比你可以這樣做: select convert(int,'0010')

+0

不,它不應該是一個數。字符'1A'在我的問題中沒有意義。 – steenhulthin 2012-01-12 19:49:28

+0

十六進制,也許? – HABO 2012-01-13 02:53:14

+0

沒錯,我錯過了。你看到這個:http://stackoverflow.com/questions/92093/removing-leading-zeroes-from-a-field-in-a-sql-statement?重做它你可以使你的查詢更好一點:declare @var varchar(20)='0010' select Rtrim(RIGHT(@ var,patindex('%[^ 0]%',@ var))) – Mordechai 2012-01-13 07:50:35