2017-02-18 56 views
1

我有一列,它看起来像如何替换列中的文本?

Quarter 
------- 
Q1 2012 
Q2 2012 
Q1 2013 

,我想

Quarter 
------- 
Q1 
Q2 
Q1 

这里就是我来带:

UPDATE TABLE [WA Products Sales].[dbo].[WA_Sales_Products] 
SET 
    Quarter = REPLACE (Quarter, SUBSTRING(Quarter, 1, CHARINDEX(' ', Quarter)-1) 

它返回

Msg 156, Level 15, State 1, Line 2 
Incorrect syntax near the keyword 'TABLE'. 

任何帮助将不胜感激。

+0

还有的definetly缺少一个右括号,但如果这是问题... – Turo

+0

不,我只是没有在复制的语法选择它。但是,谢谢。 –

+0

MS不是我的方言......你确定需要'TABLE'关键字吗?括号[]是否正确? –

回答

0

除非我失去了一些东西,这应该得到你想要的结果:

UPDATE [WA Products Sales].[dbo].[WA_Sales_Products] 
SQL Quarter = LEFT(Quarter, 2) 
WHERE LEN(Quarter) > 1 -- added this condition 
+0

'传递给LEFT或SUBSTRING函数的长度参数无效。' 但我想使它更通用。 –

+0

很奇怪,因为这工作得很好: 'ALTER TABLE [WA产品销售] [DBO] [WA_Sales_Products] 加Q AS LEFT(区,CHARINDEX(””,区)-1)' –

+0

看到我的编辑答案。 。添加了where条件,以便更新只会发生在长于一个字符的值上。这应该可以防止您报告的错误。传递给LEFT或SUBSTRING function.'这 –

1

与该查询的问题:

UPDATE TABLE [WA Products Sales].[dbo].[WA_Sales_Products] 
    SET Quarter = REPLACE(Quarter, SUBSTRING(Quarter, 1, CHARINDEX(' ', Quarter)-1) 

是,当Quarter没有空格失败。更小的问题是LEFT()更合适。您可以通过在空间添加解决了第一个问题:

UPDATE TABLE [WA Products Sales].[dbo].[WA_Sales_Products] 
    SET Quarter = LEFT(Quarter, CHARINDEX(' ', Quarter + ' ') - 1); 

这应该可以解决这个问题有一个坏的参数LEFT()