【问题标题】:SQL cast() INT to CHAR not working in UPDATE querySQL cast() INT to CHAR 在 UPDATE 查询中不起作用
【发布时间】:2015-12-06 17:36:43
【问题描述】:

我正在尝试通过将默认顺序设置为等于当前存在的ID 来将排序信息追溯添加到我的 SQL 数据库中。 ID 列是 INTsequence 列是 TEXT

我希望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))+'"]'

【问题讨论】:

  • sql server 还是 mysql?
  • MySQL(带 PHPMyAdmin 界面)

标签: mysql sql sql-update


【解决方案1】:

使用concat()concat_ws()

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

您查询的问题是+ 在 MySQL 中表示添加,而不是字符串连接。

【讨论】:

  • 谢谢,这成功了!我以为我读过 + 是连接,但我想不是。您可能想更新您的答案以供将来参考,有一个小的语法错误,这是正确的:update products p set p.sequence = concat('["', concat_ws('","', p.id, p.id, p.id), '"]')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2017-02-15
  • 1970-01-01
  • 2012-09-20
  • 2016-08-30
  • 2012-05-15
相关资源
最近更新 更多