情况:
我有一个包含一堆图像的数据库,我正在将它们导出到文件夹中。有一个图像列和一个源图像列。在“源图像”列中,大多数记录如下所示:
Column 1 Column 2
C:\blah\blah\test.pdf BlobField
导出文件时,我想将其命名为test.pdf,我通过以下方式做到这一点:
RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1)
哪个很棒。
但是在某些记录中,它们看起来就像
Column 1
Message.txt
我得到一个无效的长度参数传递错误,因为我猜它没有\。
有人知道如何解决吗?
答案 0 :(得分:3)
只需在\
的末尾附加SOURCE_DOCUMENT
即可防止错误:
SELECT RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT) +'\', 0))-1)
答案 1 :(得分:0)
如果列具有RIGHT(...)
字符,则可以使用CASE表达式获取一个值(您的\
函数),否则,可以使用不同的值(可能是整个字符串)。
答案 2 :(得分:0)
检查文档名称中是否有\
,如果仅是文件名,请返回原样:
IIF(CHARINDEX('\', SOURCE_DOCUMENT) > 0, RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1), SOURCE_DOCUMENT)
答案 3 :(得分:0)
您可以使用CASE
语句来实现此目的:
SELECT CASE
WHEN CHARINDEX('\', SOURCE_DOCUMENT) > 0 THEN RIGHT(SOURCE_DOCUMENT, (CHARINDEX('\',REVERSE(SOURCE_DOCUMENT),0))-1)
ELSE SOURCE_DOCUMENT
END AS SOURCE_DOCUMENT
这将利用您的RIGHT(...)
语句,其中该列包含反斜杠,或者仅返回不包含反斜杠的列。