2012-01-12 2 views
0

두 글자를 다르게 포맷해야하는 두 글자 인 char(4)을 비교해야합니다. 따라서 다른 형식과 비교할 수 있도록 하나의 형식을 원합니다. 기본적으로 접두사 0과 후행 공백이 있으면 제거해야합니다.접두어가 붙은 모든 문자 및 접미사 공백을 제거하십시오.

문자 : 예를 들어

'001 ''1' 모두

'010 ''10'를 포맷 한 후 '1A'에 비교해야 모두

'001A''1A'를 포맷 한 후 '1'에 비교해야해야 둘 다와 비교됩니다.

'010A''10A'를 포맷 한 후 둘은 모두

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

보인다 포맷 한 후 '100A'에 비교해야

'100A'를 포맷 한 후 '100'에 비교해야

'100 ''100'를 포맷 한 후 '10A'에 비교해야 일하기는하지만 재사용에 낭비된다. 문자열을 두 번 배치하고 실제로 의도를 명확하게 나타내지는 않습니다.

보다 효율적으로 및/또는 우아한 방식으로 결과를 얻을 수 있습니까?

+0

@Benoit [LTRIM] (http://msdn.microsoft.com/en-us/library/ms177827.aspx) 및 [RTRIM ] (http://msdn.microsoft.com/en-us/library/ms178660.aspx) 두 번째 매개 변수를 사용하지 마십시오. –

+0

@JoeStefanelli 무슨 뜻인지 확실하지 않습니다. 이 예에서 LTRIM과 RTRIM은 하나의 매개 변수만을 사용합니다. 당신은 정교 할 수 있습니까? (가독성/명확한 의도가없는 언급 된 문제에 밑줄을 붙일 수도 있습니다.) – steenhulthin

+0

나는 그가 삭제 한 @Benoit에 의해 게시 된 커미션에 응답하고있었습니다. –

답변

1

결과는 숫자입니까? 다음과 같이 할 수 있습니다. convert (int, '0010')

+0

아니요, 그게 아닌 것으로 간주되지 않습니다. 번호. char '1A'는 내 문제에서 int로 이해가되지 않습니다. – steenhulthin

+0

아마도 16 진수일까요? – HABO

+0

맞아, 나는 그것을 놓쳤다. 당신이 봤어 : http://stackoverflow.com/questions/92093/removing-leading-zeroes-from-a-field-in-a-sql-statement? 다시 작성하면 쿼리를 좀 더 멋지게 만들 수 있습니다. @var varchar (20) = '0010' select Rtrim (RIGHT (@ var, patindex ('% [^ 0] %', @ var))) – Mordechai

관련 문제