SQL Update语句截断了错误的双值错误

时间:2017-11-06 06:59:27

标签: mysql sql

我正在尝试将表列值更新为字符串。我的查询就像这样

UPDATE   tbl_testing

SET result= 'Hey'

WHERE (SELECT (colOne) + '-' + (colTwo) + '-' + (colThree)) = 'r-r-r'

列'colOne,colTwo和colThree'已经包含'r'但是slqyog显示“截断错误的DOUBLE值:'r-r-r'”   并且所有其他结果列数据变为='嘿'。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您必须确定它是MySQLMSSQL

MySQL中,字符串连接不是+符号,而只是枚举用逗号分隔的列,语句为SELECT CONCAT("Field1", "Field2" etc) AS ConcatenatedString); - CONCAT()函数。

尝试重新评估您的DB引擎并调整查询。

MSSQL中,字符串连接确实是+符号。您的查询在MSSQL中正常运行,并使用您设置的值更新result列。

<强> DDL

CREATE TABLE [dbo].[tbl_testing](
    [id] [int] NULL,
    [result] [nvarchar](4000) NULL,
    [colOne] [nvarchar](4000) NULL,
    [colTwo] [nvarchar](4000) NULL,
    [colThree] [nvarchar](4000) NULL
) ON [PRIMARY]

GO

INSERT INTO tbl_testing (id, colOne, colTwo, colThree)
VALUES (1, 'r', 'r', 'r')

更新声明

UPDATE tbl_testing
SET result='Hey. I am a concatenated string'
WHERE (SELECT (colOne)+'-'+(colTwo)+'-'+(colThree))='r-r-r'

<强>输出

id  result                             colOne  colTwo colThree
1   Hey. I am a concatenated string     r         r     r

答案 1 :(得分:0)

更改评论以回答:

你应该避免以这种方式做那些陈述。通过这样做,数据库不使用索引,并且您还向数据库服务器提供了更多的计算任务(服务器需要连接所有值,并且在连接之后将与给定的字符串进行比较)。

更好的方法是用以下内容替换你的陈述:

`WHERE colOne = 'r' AND colTwo = 'r' AND ...`

在没有额外计算需要的情况下工作得更快(连接字符串)。

此解决方案的工作速度要快得多,看起来要好得多。