2012-01-12 100 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