当数据长度未知时,如何在数据中添加空格?
选择字符数据时,我试图用空格填充数据,以使所返回的长度对于所有行都是相同的。对于实例,长度应始终保持15。
这最终将进入包含所有固定长度列的报告中,因此每个字段返回的数据大小必须一致。
需要用空格填充。
答案 0 :(得分:1)
对于SQL Server,您可以执行以下操作:
-- Create a sample table
CREATE TABLE T(
ID INT IDENTITY(1, 1),
Str VARCHAR(15)
);
--Insert some data
INSERT INTO T (Str) VALUES
('abc'), --3 chars
('abcdefg'), --7 chars
('abcrfhtkidleoky'); -- 15 chars
--See the data
SELECT *, LEN(Str) LN
FROM T;
--Update the table to add spaces
UPDATE T
SET Str = CONCAT(REPLICATE(' ', 15 - LEN(Str)), Str) --Add spaces
WHERE LEN(Str) < 15;
--See the updates
SELECT *, LEN(Str) LN
FROM T;
第一个SELECT
将返回:
+----+-----------------+----+
| ID | Str | LN |
+----+-----------------+----+
| 1 | abc | 3 |
| 2 | abcdefg | 7 |
| 3 | abcrfhtkidleoky | 15 |
+----+-----------------+----+
第二个SELECT
(更新数据后)将返回:
+----+-----------------+----+
| ID | Str | LN |
+----+-----------------+----+
| 1 | abc | 15 |
| 2 | abcdefg | 15 |
| 3 | abcrfhtkidleoky | 15 |
+----+-----------------+----+
查看其在 Live Demo 上的工作方式。
对于SQLite,您可以执行以下操作:
CREATE TABLE T(
Str VARCHAR(15)
);
INSERT INTO T VALUES
('abc'), --3 chars
('abcdefg'), --7 chars
('abcrfhtkidleoky'); -- 15 chars
SELECT *, LENGTH(Str) LN
FROM T;
UPDATE T
SET Str = Str || REPLACE(HEX(ZEROBLOB(15-LENGTH(Str))), '00', ' ')
WHERE LENGTH(Str) < 15;
SELECT *, LENGTH(Str) LN
FROM T;
答案 1 :(得分:1)
在任何数据库中,都可以转换为char()
:
select cast(col as char(15))
char()
类型是固定长度,并用空格填充。
更典型的方法是用空格填充值。确切的方法因数据库而异。
答案 2 :(得分:0)
isnull([field],'')+SPACE(15-LEN(isnull([field],'')))