小编G. *_*ini的帖子

如何在sql中连接两个不同类型的列?(没有收到一些奇怪的警告)

当我尝试连接不同类型的两列时,我收到以下警告:

表达式 (CONVERT_IMPLICIT(varchar(41), [TABLE].[COLUMN], 0)) 中的类型转换可能会影响选择查询计划时的“CardinalityEstimate”。

通过搜索...我似乎已经明白这个警告可以从不同类型的两列的比较中得出。为此我想进行一些简单的测试来加深这个事情:

CREATE TABLE TABLE_A (
    ID DECIMAL(5, 0) NOT NULL,
    COLUMN_A VARCHAR(255) NULL
)

INSERT TABLE_A (ID, COLUMN_A) VALUES (1, 'TEST_1')
INSERT TABLE_A (ID, COLUMN_A) VALUES (2, 'TEST_2')
INSERT TABLE_A (ID, COLUMN_A) VALUES (3, 'TEST_3')
Run Code Online (Sandbox Code Playgroud)

尝试使用运算符连接不同类型的两列,会返回错误:“将数据类型从 varchar 转换为数字时出错。”

SELECT ID + COLUMN_A
FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)

如果我尝试做同样的事情但转换“ID”列,我不再有错误,但我收到前面提到的警告。

SELECT CAST(ID AS VARCHAR(255)) + COLUMN_A
FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用concat()函数连接,我会得到相同的结果,没有错误,但有警告。

SELECT CONCAT(ID, COLUMN_A)
FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)

我的问题是,即使在我投射时它们应该相等,我怎么可能收到关于比较两列的警告?如何连接不同类型的两列而不返回该警告?

提前致谢,贾科莫。

sql-server concat

6
推荐指数
1
解决办法
968
查看次数

标签 统计

concat ×1

sql-server ×1