簡體   English   中英

附加 varchar 字符串后將填充空格添加回 CHAR

[英]Add the padding spaces back to CHAR after appending varchar string

我有一個 CHAR(250) 字段,例如,它最初將包含 10 個字節的數據和 240 個字節的空間,所以剩下的它有 250-10=240 個字節。 現在我想附加一個長度為 20 bytes 的 varchar 。 所以它將變為 240 + 20 =260 字節,在插入回 CHAR 字段時會出現大小溢出問題。

可以這樣做,但我需要實際長度,這意味着我想重新填充最終字符串,即最終長度為 250 個字節,

DECLARE @Var CHAR(250)='var lenght initial Data'
SELECT replace(@Var,' ','')
DECLARE @TempVar VARCHAR(20) = 'new text to be added'
SET @FinalVar=@Var + @TempVar
--Need to add final padding back to make it back to 250 bytes

有沒有其他方法可以計算並重新添加空格鍵?

這真的是你預期的結果嗎?

初始值都在左邊,新值加到右邊?

在此處輸入圖像描述

由於您從未標記過您擁有的數據庫(正如sql標記信息所說的那樣),所以我在這里假設 MySQL/MariaDB ...

replace並沒有真正做任何事情,但您似乎想要:
(是的,不需要重新計算,通過指定長度)

DECLARE Var CHAR(250) default 'var length initial Data';
-- SELECT replace(@Var,' ',''); -- ... is not saved anywhere, so I removed.
DECLARE FinalVar CHAR(250);
SELECT CONCAT(Var, ' ', otherText) INTO FinalVar;

所以,把它放到一個函數中:

DELIMITER //

CREATE FUNCTION right_pad_spaces(otherText varchar(250)) RETURNS CHAR(250)
DETERMINISTIC
BEGIN
    DECLARE Var CHAR(250) default 'var length initial Data';
    DECLARE FinalVar CHAR(250);
    SELECT CONCAT(Var, ' ', otherText) INTO FinalVar;
    RETURN FinalVar ;
END; //

DELIMITER ;

然后使用函數,RPAD 帶空格的結果,總長度限制為 250:

SELECT RPAD(right_pad_spaces('new text to be added'), 250, ' ') AS 'new string';

輸出:(注意水平滾動條)

在此處輸入圖像描述

檢查同一呼叫的長度:

SELECT Length(
    RPAD(right_pad_spaces('new text to be added'), 250, ' ')
) AS 'total length';

給出:

在此處輸入圖像描述

這是一個處理該處理的dbfiddle
知道該站點不使用DELIMITER ,因此添加了它以供您本地使用。

所以看起來沒有“適當”的解決方法,但這就是我最終得到的

DECLARE @Var CHAR(250)='var lenght initial Data'
SELECT @Var=replace(@Var,' ','')
DECLARE @TempVar VARCHAR(20) = 'new text to be added'
SET @FinalVar=@Var + @TempVar
SELECT @TempEmails= CAST(left(@FinalVar, 250) AS CHAR(250)) --CAST to char pads back to 250 , this is the easiest way

Tweak 是CAST AS CHAR(250)它將重新填充字符串到 250

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM