2015-12-06 39 views
1

我試圖通過設置默認順序等於當前存在的ID來追溯性地將排序信息添加到我的SQL數據庫。 ID列是INTsequence列是TEXTSQL cast()INT到CHAR在UPDATE查詢中不起作用

我想sequence列在以下格式:["1", "1", "1"]

以下工作:

UPDATE products p 
SET p.sequence = p.id 

出於某種原因,每當我得到的查詢工作(即使有cast()),它添加值而不是串接它們...

例如,我試過了:

UPDATE products p 
SET p.sequence = cast(p.id as char(10))+cast(p.id as char(10)) 

並且sequence列全部變爲值id + id,例如, ID = 1,序列= 2 ...

然後,如果我嘗試:

UPDATE products p 
SET p.sequence = '["'+p.id+'", "'+p.id+'", "'+p.id+'"]' 

結果:sequence的值是現在ID三倍的值,即,ID = 2,序列= 6。它將添加ID而不是連接它們。

如果我cast()相同的查詢,它說: 「受影響的0行」:

UPDATE products p 
SET p.sequence = '["'+cast(p.id as char(10))+'", "'+cast(p.id as char(10))+'", "'+cast(p.id as char(10))+'"]' 
+0

sql server或mysql? – Mihai

+0

MySQL(帶PHPMyAdmin接口) – SanguineEpitaph

回答

2

一個非常簡單的方式做你想做的就是用concat()concat_ws()

update products p 
    set p.sequence = concat('["', 
          concat_ws('","', p.id, p.id, p.id, 
          '"]'); 

你的查詢的問題是,+意味着在MySQL中增加,而不是字符串連接。

+0

謝謝,這工作!我以爲我讀+是串接,但我猜不是。您可能需要更新您的答案以供將來參考,但有一個小的語法錯誤,這是正確的:'更新產品p set p.sequence = concat('['', concat_ws('','',p。 id,p.id,p.id), '「]')' – SanguineEpitaph