仅选择nvarchar SQL Server 2005的一部分

时间:2010-02-10 15:53:18

标签: sql-server tsql

我正在将数据从一个数据库传输到另一个数据库(升级系统)并快速提问。

在源数据库(当前正在使用的数据库)中,我有一个使用绝对路径存储URL的列。在我的新数据库中,我使用的是相对路径。如何修剪传输路径的绝对部分(我正在使用INSERT INTO),只留下文件名?

谢谢! 千斤顶

2 个答案:

答案 0 :(得分:3)

您可以尝试类似

的内容
DECLARE @Table TABLE(
        Val VARCHAR(50)
)

INSERT INTO @Table SELECT '\\test\tada.xml'
INSERT INTO @Table SELECT 'tada1.xml'

SELECT  Val,
        CASE WHEN CHARINDEX('\',Val,0) > 0 THEN SUBSTRING(Val,LEN(Val) - (CHARINDEX('\',REVERSE(Val),0) - 1) + 1, CHARINDEX('\',REVERSE(Val),0)) ELSE Val END
FROM    @Table

或者你可以在C#中创建一个CLR标量函数,这样可以让你更容易。

查看How to: Create and Run a CLR SQL Server User-Defined Function

答案 1 :(得分:1)

如果每个文件的绝对路径中的字符数相同,则可以使用SUBSTRING。这不是最易维护的解决方案,但对于一次性查询,您应该没问题。

实施例

DECLARE @filename varchar(50)
SET @filename = 'example.com/audiofiles/myaudio.mp3'

INSERT INTO newtable
(file_name)
VALUES
(SUBSTRING(@filename, 24, LEN(@filename) - 23))