2012-11-07 2 views
0

두 문자 사이의 문자 수 (알파벳순으로 a부터 z 또는 z까지)를 어떻게 계산합니까?SQL Server - 두 문자 사이의 문자 수를 계산하십시오.

예를 들어 :이 쉽게 UDF 년대와 while 루프를 사용하여 수행 할 수있는 방법을 볼 수 있지만 빠른 방법이 있다면 궁금 해서요

StartChar EndChar Diff 
a   e   4 
m   r   5 
f   a   -5 

을 :

WITH ExampleData 
      AS (SELECT 'a' AS StartChar, 'e' AS EndChar 
       UNION ALL 
       SELECT 'm', 'r' 
       UNION ALL 
       SELECT 'f', 'a' 
      ) 
    SELECT StartChar , 
      EndChar 
    FROM ExampleData 

는 생산해야 ? 이미 StartChar 및 EndChar에 유효성 검사를 수행 한 가정

답변

6
SELECT StartChar, EndChar, ASCII(EndChar) - ASCII(StartChar) AS Diff 
FROM ExampleData 

SQL Fiddle example

+1

, 롤 대답은 "나는이 생각하지 않은 이유는"확실한 (긴 하루 - 너무 적은 커피) – HeavenCore

+1

나는 좋겠 커피도 좋아. 그것은 좋은 직업에 대한 requriement이야! : D – Rikki

+0

우리 모두가 그곳에 왔습니다 .... – curtisk

0

은 ...

SELECT ASCII(EndChar) - ASCII(StartChar) as Diff 
0

이 작업이 당신을 위해 끝내야한다 :

WITH ExampleData 
      AS (SELECT 'a' AS StartChar, 'e' AS EndChar 
       UNION ALL 
       SELECT 'm', 'r' 
       UNION ALL 
       SELECT 'f', 'a' 
      ) 
    SELECT StartChar , 
      EndChar, ascii(EndChar) - ascii(StartChar) as Diff 
    FROM ExampleData 
0

CTE는 정말 멋지다! 그것은 때때로 나를 미치게한다. 이렇게하면 다음을 할 수 있습니다.

; With CharCodes (
    Code 
) As   (
    Select 65 
Union All 
    Select Code 
    + 1 
     From CharCodes 
     Where Code  < 90 
) 
    Select Second.Code 
    - First.Code 
     From CharCodes As First 
     , CharCodes As Second 
     Where First.Code = Convert(Int, Convert(VarBinary, 'A')) 
     And Second.Code = Convert(Int, Convert(VarBinary, 'E')) 

ASCII 기능을 사용하지 않고. 아스키 기능을 사용하면이 이런 식으로 수행 할 수 있습니다

Select ASCII('E') 
- ASCII('A') 

건배를

+2

당신은 왜 당신의 모범에서 첫 번째 길을 가기를 원하지 않습니까? 단순한 작업에 지나치게 바쁜 것 같습니다. – curtisk

+0

당신이 뭔가를 잃어 버렸던 곳. 그것은 바쁜 것 같지만 어떤 상황에서는 그렇게하는 것을 선호합니다. 그것은 많은 조건에 달려 있습니다. ;) – Rikki

관련 문제