[英]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.