12

「a」、「b」、「c」の文字があります。結果を TSQL でそれぞれ「b」、「c」、「d」にしたいと思います。これを達成するために私は何を使用しますか?

4

5 に答える 5

19

を使用ASCIIして文字の値を取得し、1 を加算してCHARから、値を文字に戻すために使用します。

SELECT CHAR(ASCII('a') + 1)
于 2012-08-29T13:26:18.403 に答える
11

これは、1文字で行う方法です

DECLARE @myletter char(1) = 'a';
SELECT CHAR(ASCII(@myletter)+1);
于 2012-08-29T13:25:21.957 に答える
2

2 つの SQL プロシージャーを持つ 3 文字のアルファベットのカウンター

(a、b...z、aa、ab...zy、zz、aaa...zzz):

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

alter procedure letraMas
@letraEntra as char( 1),
@letraSale as char( 1) OUTPUT,
@seLleva as bit  OUTPUT

as

--set @letraEntra = 'w'
--set @letraSale = 'm'
set @seLleva = 0

select
@letraSale = CASE
        WHEN @letraEntra = '' or (@letraEntra is null) or @letraEntra = 'z'
        THEN 'a'
    WHEN @letraEntra < 'z'
        THEN CHAR (ASCII( @letraEntra) + 1)
end

if @letraEntra = 'z' set @seLleva = 1

return

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

/* USO:
declare
@tareaEntra as char(3),
@tareaSale as char(3)
set @tareaEntra = 'xzz'
       EXEC tareaMas @tareaEntra, @tareaSale OUTPUT
*/
alter procedure tareaMas
@tareaEntra as char( 3),
@tareaSale as char( 3) OUTPUT

as
declare @charU as char(1 )     -- char de U_nidades albabéticas
declare @charD as char(1 )     -- char de D_ecenas albabéticas
declare @charC as char(1 )     -- char de C_entenas albabéticas
declare @letraSale as char(1 )        -- char de C_entenas albabéticas
declare @seLleva as bit

set @tareaEntra   = right('   ' + rtrim (@tareaEntra), 3)

set @charU = substring(@tareaEntra , 3, 1)
set @charD = substring(@tareaEntra , 2, 1)
set @charC = substring(@tareaEntra , 1, 1)

EXEC letraMas @charU, @letraSale OUTPUT, @seLleva OUTPUT
set @charU = @letraSale
if @seLleva = 1
BEGIN
        EXEC letraMas @charD, @letraSale OUTPUT, @seLleva OUTPUT
        set @charD = @letraSale
        if @seLleva = 1
        BEGIN
               EXEC letraMas @charC, @letraSale OUTPUT, @seLleva OUTPUT
               set @charC = @letraSale
        END
END

set @tareaSale = ltrim(@charC + @charD + @charU)
return
于 2016-02-23T10:18:33.330 に答える
1

これは、Jonathan Wood の実装による CTE です。

;WITH cte AS
   (SELECT  CHAR(ASCII('a')) [char], 1 [count]
    UNION ALL
    SELECT  CHAR(ASCII('a') + cte.count) [char], cte.count + 1 [count]
    FROM    cte)
SELECT  TOP(26) cte.count[pos], cte.char
FROM    cte

そのように使用するか、結果をテーブル変数または一時テーブルに挿入して使用することができます。

私が提供するもう1つのヒントは、データベースにこのcteのデータを含むテーブルを用意しておくことです。そうすれば、将来、それに参加して、目的や理由を問わず、そのように使用することが容易になります。

于 2014-08-20T07:21:06.403 に答える
0
DECLARE @Letters AS TABLE
(
    Letter CHAR(1)
)
INSERT INTO @Letters
        ( Letter )
VALUES  ( 'A' )
INSERT INTO @Letters
        ( Letter )
VALUES  ( 'B' )
INSERT INTO @Letters
        ( Letter )
VALUES  ( 'C' )
SELECT CHAR(ASCII(Letter) + 1) FROM @Letters

SQL でテーブル変数を使用する例ですが、上記のいずれかで実行できます。明らかに文字のリストを照合するために使用する方法によって異なります。

于 2012-08-29T13:36:50.637 に答える