2

ストアドプロシージャがあります。@p_FRchar(6)であると呼ばれる1つの変数を渡します。ただし、渡される値は必ずしも6文字の長さであるとは限りません。値が4文字または5文字しかない場合もあります。文字列が常に6文字の長さであることを確認する必要があります。たとえば、@p_FRが8534の場合、先行ゼロを2つ追加する必要がある@p_FRため、008534になります。

やってみた

set @fr = right('000000', @p_FR, 6)

@frvarchar(6)です

しかし、@p_FRが8534の場合、@frはまだ8534です。008534である必要があります。

また、新しいクエリで次のコードブロックを設定しましたが、それでも8534を取得しました。

declare @p_FR as char(6),
    @fr as varchar(6)
set @p_FR = '8534'
set @fr = right('000000' + @p_FR, 6) 
select @fr
4

2 に答える 2

4

rtrimを使用して空白を削除します。

declare @p_FR as char(6),
    @fr as varchar(6)
set @p_FR = '8534'
set @fr = right('000000' + rtrim(@p_FR), 6) 
select @fr
于 2012-05-15T20:23:10.203 に答える
1

この問題を解決する最も簡単な方法は、char(6)の代わりにvarchar(6)を使用することだと思います。そうすることで、varcharは文字列のみを格納し、末尾のスペースを含まないため、末尾のスペースについて心配する必要はありません。いっぱいになります。

それがオプションでない場合は、RDBMSがRTRIMをサポートしていると仮定して、RTRIM(@p_FR)を使用できます。使用しているRDBMSを指定していませんが、ある種のSQLServerを想定しています。

于 2012-05-15T21:04:42.843 に答える