0

2つの文字の間の文字数(アルファベット順はaからzまたはzからa)をどのように数えますか?

例えば:

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    Diff
a           e          4
m           r          5
f           a          -5

udfとwhileループを使用してこれを簡単に行う方法はわかりますが、もっと速い方法があるかどうか疑問に思っていました。

4

4 に答える 4

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

SQLフィドルの例

于 2012-11-07T17:11:38.597 に答える
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
于 2012-11-07T17:13:16.750 に答える
0

CTEは素晴らしいです!このようにして、ASCIIを使用したくない場合にそれを行うことができます。

;   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')
于 2012-11-07T17:13:46.427 に答える
0

StartCharとEndCharの有効性チェックをすでに実行していると仮定します...

SELECT ASCII(EndChar) - ASCII(StartChar) as Diff
于 2012-11-07T17:11:56.380 に答える