需要输出substring sql而不使用reverse

时间:2017-07-20 06:09:47

标签: sql

我有一个返回输出的SQL查询;我需要在最后一次出现时得到子字符串,我很困惑,无法找到如何做到这一点:

SELECT
    spsetuppath,
    SUBSTRING(spsetuppath, 0, (LEN(spsetuppath) - CHARINDEX('\', RTRIM(LTRIM(REVERSE(spsetuppath))))) + 1)
FROM
    UMRdb..sql_spversion 
WHERE
    bitversion = '64' 
    AND productversion = ' 10.50.2500.0'

此命令的输出如下

enter image description here

对于最后一列,我需要exe之前的路径,我只需要exe文件名 - 怎么做?

所以输出我期待看起来像这样

SQLServer2008R2SP1-KB2528583-x64-ENU.exe

2 个答案:

答案 0 :(得分:0)

这可以帮到你:

SELECT
    spsetuppath,
    SUBSTRING(spsetuppath, CHARINDEX('\', RTRIM(LTRIM(REVERSE(spsetuppath)))) - 1, 150)
FROM
    UMRdb..sql_spversion 
WHERE
    bitversion = '64' 
    AND productversion = ' 10.50.2500.0'

示例:

DECLARE @string varchar(256) = '\\blablabla\dbms\MSSQL\SQL SERVER 2008\SQLServer2008R2SP1-KB2528583-x64-ENU.exe'

SELECT SUBSTRING(@string, CHARINDEX('\', RTRIM(LTRIM(REVERSE(@string)))) - 1, 150)

编辑:如果您想避免SUBSTRING功能,请使用此功能:

DECLARE @string varchar(256) = '\\blablabla\dbms\MSSQL\SQL SERVER 2008\SQLServer2008R2SP1-KB2528583-x64-ENU.exe'

SELECT REVERSE(LEFT(REVERSE(@string),CHARINDEX('\', RTRIM(LTRIM(REVERSE(@string)))) - 1))

答案 1 :(得分:0)

选择正确(spsetuppath,charindex('\',reverse(spsetuppath)+'\') - 1)来自UMRdb..sql_spversion,其中bitversion ='64'和 productversion = '10.50.2500.0'

这很棒。