2016-03-24 79 views
1

我想更新多個具有相似名稱的列。在MySQL中可能嗎?更新像MySQL中的列

事情是這樣的:

update `my_table` set `column` = 0 where `column` regexp `'Q%[0-9]$'` 
+0

這是不好的做法,張開跨多個列中的數據。另外一張桌子上有各種各樣的Q可能會更好。 –

回答

1

試試這個。您需要使用SYS數據庫表來獲取列名,因此您可以正確設置你的SQL:

DECLARE @tableName varchar(10) 
SET @tableName = 'yourtablenamehere' 

DECLARE @sql VARCHAR(MAX) 
SET @sql = '' 

SELECT @sql = @sql + 'UPDATE ' + @tableName + ' SET ' + c.name + ' = '''' WHERE ' + c.name + ' IS NULL ;' 
FROM sys.columns c 
INNER JOIN sys.tables t ON c.object_id = t.object_id 
INNER JOIN sys.types y ON c.system_type_id = y.system_type_id 
WHERE t.name = @tableName 
and c.name regexp `'Q%[0-9]$'` 

EXEC (@sql) 

參考:Dynamic update statement with variable column names

0

如果您嘗試基於列名更新列值,那麼你可以使用通配符「like」。它使查詢更優化,運行速度更快。像下面的東西應該工作:

更新my_table 設置column = 0 其中column LIKE '%' 列名'%'

+0

這不會根據列_name_進行選擇,只能在列_value_上進行選擇。 –