2016-11-21 105 views
4

比方说,我们节省了table内上ColumnString以下值:替换第一个出现的'。'在SQL字符串

Select ValuesT from TableT; 

    ValuesT 
-9.827.08 
-9.657.40 
-80.000.00 
-8.700.00 
-8.542.43 
-8.403.00 

怎么可能什么也没有只中第一次出现“替代”。 (点)从字符串?

例:对于-9.827.08应该-9827.08

我试着用stuff功能,但是这不会对-80.000.00

select stuff(ValuesT ,3,1,'') from TableT 

回答

11

使用STUFF功能

工作查找使用CHARINDEX.第一次出现并使用STUFF

将其删除3210
SELECT STUFF(valuesT, CHARINDEX('.', valuesT), 1, '') 
FROM TableT 
1

另一种方式。

WITH sampleData AS 
( 
    SELECT val FROM (VALUES 
    ('-9.827.08'), ('-9.657.40'), ('-80.000.00'), ('-8.700.00'), 
    ('-8.542.43'),('-8.403.00')) x(val) 
) 
SELECT SUBSTRING(val, 1, d1.d-1)+SUBSTRING(val, d1.d+1, 100) 
FROM sampleData 
CROSS APPLY (VALUES (CHARINDEX('.',val))) d1(d); 

它多一点的代码,但效率一样。你可以用这种技术做更多的事情。

+0

不错! CTE中的VALUES的范围是什么?我也尝试了CTE,但是我没有拿出结果。 10x –

+1

CTE只是一个模拟真实表格的快速方法。没有不同,如果我这样做: CREATE table dbo.sampledata(val varchar(20)); ('-8.827.08'),(''-80.000.00'),('-8.700.00'), ('-8.542。')。 43 '),(' - 8.403.00' ); (VAL,1,d1.d + 1,100) FROM dbo.sampleData CROSS APPLY(VALUES(CHARINDEX('。',val)))d1 (d); 编辑:刚才了解到你不能在这些回复中执行SQL代码;) –

+0

谢谢!我只是复制了SQL环境中的代码并在那里合成。 –

相关问题