SQL Server 2008 中的 CONCAT 函数替代项

CONCAT function alternative in SQL Server 2008

我正在尝试在 SQL Server 2008 中使用 CONCAT 函数。它不起作用,因为它在该版本中不可用:

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

当我在 google "How to" 时,我发现 post 这里说使用 + 代替。所以我尝试了:

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

但我收到了这条消息:

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Conversion failed when converting the nvarchar value ' 22067-' to data type int.

那么,我该如何解决呢?

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

SELECT COALESCE(Project, '')
     + '-'
     + COALESCE(CAST(FLOOR_ID AS VARCHAR(11)), '')
如果参数为 NULL,

CONCAT 函数不会 return NULL。 COALESCE(..., '') 需要匹配行为。

像这样将 ProjectFLOOR_ID 转换为字符串 -

CAST(Project AS VARCHAR("MAX LENGTH OF PROJECT FIELD")) 

与 FLOOR_ID

相同

尝试将 FLOOR_ID 转换为文本:

SELECT DISTINCT
    Project + '-' + CAST(FLOOR_ID AS VARCHAR(MAX)) AS value
FROM dbo.IMP_MODEL_GEOMETRY
WHERE Project LIKE '%".$test_term."%'";

当前错误消息提到字符串 ' 22067-',这意味着 FLOOR_ID 是问题的根源。