我是SQL的新手,只知道基础知识。但我所追求的是一种将单元格值拆分为2个值并将第一个拆分值添加到结束的方法。
举个例子,单元格值为FB Equiv - All White
。
我希望该值导致All White - FB Equiv
。
我写了这个:
UPDATE [TABLENMAME]
SET Colour = Colour + ' - FB Equiv'
WHERE Colour like 'FB Equiv%'
UPDATE [TABLENMAME]
SET Colour = LTRIM(SUBSTRING(Colour, 11, LEN(Colour)))
WHERE Colour LIKE 'FB Equiv - %'
GO
这样可以正常工作,但一次只能在一个表上工作。 有没有办法循环遍历所有表并运行它?
答案 0 :(得分:3)
有没有办法循环遍历所有表并运行它?
是的,通过编写动态SQL查询INFORMATION_SCHEMA.TABLES来设置UPDATE语句的表,然后从内存中执行生成的SQL。
但请不要那样做。这是一个非常糟糕,冒险的想法,有着可怕的潜在问题。这也是一个标志,可能是表格设计不正常。我已经阅读了规范化并首先修复了这个设计。
答案 1 :(得分:0)
您可以通过执行以下操作来交换单个表中的值:
UPDATE [TABLENMAME]
SET Colour = (SUBSTRING(Colour, CHARINDEX(' - ', Colour) + 3, LEN(Colour)) +
' - ' +
LEFT(Colour, CHARINDEX(' - ', Colour))
)
WHERE Colour like '% - %';
这是使用SQL Server语法,它似乎是您正在使用的数据库。
答案 2 :(得分:0)
update [TABLENMAME]
SET Colour = SUBSTRING(Colour, 1, CASE CHARINDEX('-', Colour)
WHEN 0
THEN
LEN(Colour) ELSE CHARINDEX('-', Colour)-1 END) + '-' +
SUBSTRING(Colour, CASE CHARINDEX('-', Colour)
WHEN 0
THEN LEN(Colour)+1
ELSE CHARINDEX('-', Colour)+1 END, 1000)
颜色如何' FB Equiv%'