我正在尝试将表列值更新为字符串。我的查询就像这样
UPDATE tbl_testing
SET result= 'Hey'
WHERE (SELECT (colOne) + '-' + (colTwo) + '-' + (colThree)) = 'r-r-r'
列'colOne,colTwo和colThree'已经包含'r'但是slqyog显示“截断错误的DOUBLE值:'r-r-r'” 并且所有其他结果列数据变为='嘿'。我该怎么办?
答案 0 :(得分:0)
您必须确定它是MySQL
或MSSQL
。
在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 ...`
在没有额外计算需要的情况下工作得更快(连接字符串)。
此解决方案的工作速度要快得多,看起来要好得多。