3

私は SQL を初めて使用し、MS SQL Server (MS SQL Server 2012) 用の UDF 関数を作成したいと考えていますが、非常に単純な式が機能していません。2 つの文字列を連結し、結果を最初の文字列に保存したいだけです。

DECLARE @ret   CHAR (20)
SET @ret = '4'
SET @ret = @ret + '55'

実行後、@retそのまま4!なんで?「4」に別の変数を導入すると、機能します。どうすれば問題を克服できますか?

4

5 に答える 5

3

これは、charデータ型を使用しているためです。

'4'値をに格納すると、次のchar(20)ようになります'4___________________'(20文字の長さ、_ここではスペースを表します)。

連結'4___________________''55'て取得した場合'4___________________55'(22文字の長さ)。

char(20)これを変数に戻すと、 20文字に切り捨てられ、が得られ'4___________________'ます。

于 2012-09-06T17:10:31.737 に答える
2

When you have a CHAR(20) the first SET will actually store '4' with 19 blank characters at the end. This is because the CHAR datatype is fixed width, and will pad your data with blank characters until it gets to the size, 20 here.

When you concatenate the '55' onto the end, it will be the 21st and 22nd characters in the string, and fall off when you try to store it inside @ret, which can only hold the first 20 characters.

Using an VARCHAR will solve your problem, allowing @ret to be the exact size you require.

DECLARE @ret VARCHAR(20);
SET @ret = '4';
SET @ret = @ret + '55';
于 2012-09-06T17:09:04.187 に答える
1

As CHAR is a fixed length string data type, so any remaining space in the field is filled with blanks.

In your scenario, SET @ret = @ret + '55' will try to store 22 character but unfortunately, the variable is already declared as 20 character long so it truncated the result back to 20 character..Hence, you'll have 20 character with truncating last 2 character i.e. '55'.

Use char data type only when you are sure about the length of data which particular char data type column have to hold....

If you use nvarchar(20) instead of char(20), it will work fine...

DECLARE @ret   nvarchar (20)
SET @ret = '4'
SET @ret = @ret + '55'

See the SQLFIDDLE

于 2012-09-06T17:09:03.667 に答える
1

連結しているものと一致するように変数のデータ型を変更します。charの代わりにvarcharを使用します

于 2012-09-06T17:11:14.890 に答える
0

関数で「cast」を使用して@retが文字列であることを確認し、コードをこれに変更してみてください。お役に立てれば。

DECLARE @ret   CHAR (20)  
SET @ret = '4'   
SET @ret = cast(@ret as varchar(1)) + '55'  

または、次のようにCHAR(20)をNVARCHAR(20)に変更します。

DECLARE @ret   NVARCHAR (20)  
SET @ret = '4'   
SET @ret = @ret + '55'  
于 2012-09-06T17:09:51.933 に答える