在 Access DAO SQL INSERT 中保留尾随空格

Posted

技术标签:

【中文标题】在 Access DAO SQL INSERT 中保留尾随空格【英文标题】:Preserve trailing spaces in Access DAO SQL INSERT 【发布时间】:2012-12-10 17:43:20 【问题描述】:

我正在使用 DAO 将数据插入 Access 数据库。当我连接字段时,会删除尾随空格。如何插入数据保留尾随空格?

例如,以下代码在创建列“mytext”时去除了字段 ref 和 name 的尾随空格:

INSERT INTO mytest (ref, mytext) SELECT ref, ref + name + '/' FROM mytable

mytable 是我已链接的 FoxPro 2.5 表。我假设 FoxPro 表中的列包含尾随空格,因为我在 FoxPro 中的数据不会占用字段的整个宽度,并且在 FoxPro 中,当我运行包含连接运算符的 REPLACE 时,会出现尾随空格:

REPLACE ALL mytext WITH ref + name

列 "ref" 和 "name" 是长度为 10 的字符字段。如果 ref = "S1" 和 name = "fred" - 在 FoxPro 中运行的命令将 mytext 设置为“S1”,然后是 8 个空格,然后是“fred”,然后是 4 个假定空格 - 在 VB6 中运行的 DAO 命令将 mytext 设置为“S1fred”

【问题讨论】:

select ref, len(ref), [name], len([name]) from mytable 结果是什么? 好主意 rene,我自己应该有的!当 ref = "S2", len(ref) = 2 当 ref = "S", len(ref) = 1 等等 - 即使字段 ref 的长度为 10 明白了,感谢您的想法 rene。请参阅下面的答案 【参考方案1】:

假设 [name] 是 10...

也许明确地添加空格会起作用

INSERT INTO mytest (ref, mytext) 
SELECT ref + space(10-len(ref)), 
       ref + [name] + space(20 - (len(ref)+len([name]) ) )+'/' 
FROM mytable

如果 ref 和/或 name 的列大小发生变化,您必须维护此查询。 为了安全起见,请使用 left(ref + space(10), 10)。如果您的列大小更改,至少它不会中断

【讨论】:

谢谢 rene,这是一种享受。 (请注意,尽管我说名称的长度为 10)。你的答案与我得到的另一个答案交叉(所以我删除了我的)。另一种方法是在末尾附加 10 个空格(使用“+ SPACE(10)”,然后取其前 10 个字符(使用“left(ref+space(10), 10)”)。 这也行,虽然我的版本会稍微(一点点)对记忆更温和... @rene: 如果ref 包含超过 10 个字符,您的版本将失败。 LEFT(column + SPACE(N), N) 将更可预测地右填充+截断。

以上是关于在 Access DAO SQL INSERT 中保留尾随空格的主要内容,如果未能解决你的问题,请参考以下文章

access SQL语句中 insert into

access SQL中如何实现“INSERT INTO”

作为 SQL Server 的前端访问 - ADO 与 DAO?

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?

Access 2010 中的 INSERT INTO 语句中出现 SQL 语法错误

MS Access 的 SQL INSERT INTO 语句