Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何替换列中的文本?_Sql_Sql Server - Fatal编程技术网

Sql 如何替换列中的文本?

Sql 如何替换列中的文本?,sql,sql-server,Sql,Sql Server,我有一个列,看起来像 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, L

我有一个列,看起来像

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'.

任何帮助都将不胜感激。

除非我遗漏了什么,否则这将为您提供所需的结果:

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

此查询的问题是:

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()

的参数不正确,确实缺少一个右括号,但是如果这是问题所在……不,我只是在复制语法时没有选择它。但是谢谢,MS不是我的方言。。。您确定需要
关键字吗?括号[]是否正确?Replace需要3个参数,为什么不简单地
Quarter=SUBSTRING(Quarter,1,CHARINDEX('',Quarter)-1)
它在没有表的情况下工作
Quarter=SUBSTRING(Quarter,1,CHARINDEX(“”,Quarter)-1)
生成
Msg 537,16级,状态2,第6行传递给LEFT或SUBSTRING函数的长度参数无效。
传递给LEFT或SUBSTRING函数的长度参数无效。
但我想让它更通用。这很奇怪,因为这样做很好:
ALTER TABLE[WA Products Sales].[dbo].[WA_Sales_Products]将Q添加为左侧(季度,charindex('',季度)-1)
请参见我编辑的答案。添加了where条件,以便更新只在长度超过一个字符的值上进行。这应该可以防止您报告的错误。
传递给LEFT或SUBSTRING函数的长度参数无效。
这开始令人沮丧……谢谢,您提供的语法似乎是正确的。无论我写什么语法,我都会遇到同样的错误,甚至从。。。生成传递给左或子字符串函数的长度参数无效。现在。在ManagementStudio中似乎出现了一些问题,但即使重新启动后,问题仍然存在。