在我的表格中,我得到了数据98753201_en_GB.dwg
。我想确定点.
的位置,我想要在此之前的6个字符 - 这里:_en_GB
。
它必须是可变的,所以我不能只使用子字符串。有任何想法吗?
答案 0 :(得分:1)
你的括号错了:
declare @test varchar(50);
set @test = '37 21_98753201_en_GB.dwg';
select substring(@test, charindex('.', @test) - 6, 6);
答案 1 :(得分:1)
试试这个
;WITH cte_TestData(FileNames) AS
(
SELECT '37 21_98753201_en_GB.dwg' UNION ALL
SELECT '38 21_98753203_en_GB.dwg' UNION ALL
SELECT '39 21_98753204_en_GB.dwg' UNION ALL
SELECT '40 21_98753205_en_GB.dwg' UNION ALL
SELECT '41 21_98753206_en_GB.dwg'
)
SELECT SUBSTRING([FileNames], CHARINDEX('.',[FileNames])-6, 6)
FROM cte_TestData
如果字符串的左侧部分有句号,也可以使用下面的代码
;WITH cte_TestData(FileNames) AS
(
SELECT '37 21_98753201_en_GB.dwg' UNION ALL
SELECT '38 21_98753203_en_GB.dwg' UNION ALL
SELECT '39 21_98753204_en_GB.dwg' UNION ALL
SELECT '40.21_98753205_en_GB.dwg' UNION ALL
SELECT '41.21_98753206_en_GB.dwg'
)
SELECT REVERSE(SUBSTRING(SUBSTRING(REVERSE([FileNames]),CHARINDEX('.', REVERSE([FileNames])) + 1,LEN(REVERSE([FileNames]))),1,6))
FROM cte_TestData
答案 2 :(得分:0)
是的,这可能是对的,但我对TSQL很新。
我现在得到的内容:SUBSTRING([FileName],CHARINDEX('。',[FileName] -6),6)。
我收到错误:转换nvarchar值时转换失败' 37 21_98753201_en_GB.dwg'数据类型int。