SQL Server 2008中的CONCAT函数替代

Bjö*_*n C 0 sql sql-server string sql-server-2008

我正在尝试CONCAT在SQL Server 2008中使用功能。该功能不起作用,因为该版本不提供该功能:

$sql = "SELECT DISTINCT(CONCAT(Project, '-', FLOOR_ID)) AS value FROM dbo.IMP_MODEL_GEOMETRY WHERE Project LIKE '%".$test_term."%'";
Run Code Online (Sandbox Code Playgroud)

当我是Google的“操作方法”时,我在这里找到了一条用+代替的帖子。所以我尝试了:

$sql = "SELECT DISTINCT( (Project + '-' + FLOOR_ID) ) AS value FROM dbo.IMP_MODEL_GEOMETRY WHERE Project LIKE '%".$test_term."%'";
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个信息:

[Microsoft] [用于SQL Server的ODBC驱动程序17] [SQL Server]将nvarchar值'22067-'转换为数据类型int时转换失败。

那么,我该如何解决呢?

Sal*_*n A 6

您正在混合+操作的数据类型。在这种情况下,SQL Server将尝试将VARCHAR表达式转换为INT(这是根据数据类型优先级规则完成的)。您需要将INT显式转换为VARCHAR:

SELECT COALESCE(Project, '')
     + '-'
     + COALESCE(CAST(FLOOR_ID AS VARCHAR(11)), '')
Run Code Online (Sandbox Code Playgroud)

CONCAT如果参数为NULL,则函数不会返回NULL。COALESCE(..., '')必须匹配行为。