【问题标题】:Why is SQL code to get the extension adding extra spaces?为什么要获取扩展名的 SQL 代码要添加额外的空格?
【发布时间】:2017-01-31 22:33:16
【问题描述】:

我按照这个答案Get extension of a file using SQL? 中的示例从文件夹中的文件列表中提取扩展名。它工作得很好,但会增加 6 个额外的空间。我试过添加一个 rtrim,但这并没有帮助,除非我把它放在错误的位置。

create table images
(
id int IDENTITY(1,1) PRIMARY KEY,
PartNo char(10),
aFileName char(255),
extension char(10),
aFile char(255),
depth int,
isFile bit
)

insert images (aFile, depth, isFile)
EXEC xp_dirtree 'C:\Program Files\e-Con Solutions\e-Con 2012 R2\Web\images\coverpools', 10, 1

这会返回文件名,例如 010001.eprt

update images   
SET extension = rtrim(REVERSE(
                       left(rtrim(REVERSE(aFile)), 
                       case when CHARINDEX('.', REVERSE(aFile) ) = 0 then LEN(REVERSE(aFile)) 
                       else CHARINDEX('.', REVERSE(aFile))-1 end)
                       ))

这是返回扩展 eprt###### 的代码

【问题讨论】:

  • 我已经添加了 sql-server 标签,语法看起来像这样。
  • 我很确定这与修剪/扩展无关,而与char(10) 无关。
  • postgresql.org/docs/current/static/datatype-character.html: "如果要存储的字符串比声明的长度短,character 类型的值将被空格填充"(我会链接MSDN SQL Server 文档,但他们实际上并没有提到这一点)
  • 感谢@melpomene 的快速回复。那是我的问题。

标签: sql sql-server character-trimming


【解决方案1】:

您需要更改表定义并将扩展列从extension char(10) 转换为extension varchar(10),正如@melpomene 在 cmets 中指出的那样。

【讨论】:

  • 感谢您的快速回复!这就是问题所在。
  • 不客气,但@melponene 是 cmets 中的第一个……尽管在查看表定义时确实很明显。不要使用 CHAR 数据类型,除非您确切知道您将需要其中的每个字符。如果不确定是否将为给定的列值填充所有字符,请使用 varchar(length)。看看你是否也需要更新 aFile 和 aFilename 列。我认为那些也应该是 varchar()。
  • @JoshMcGee Josh,我知道这很容易解决,但如果您接受答案,我们将不胜感激。另外,我已经为你的问题投票了,所以现在你有超过 15 名代表,可以自己投票并回答问题;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多