T-SQL确定特定字符

时间:2017-03-22 06:35:18

标签: sql-server tsql

在我的表格中,我得到了数据98753201_en_GB.dwg。我想确定点.的位置,我想要在此之前的6个字符 - 这里:_en_GB

它必须是可变的,所以我不能只使用子字符串。有任何想法吗?

3 个答案:

答案 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。