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