SQL Server 2008中CONCAT函数的替代品

1 人关注

我正试图在SQL Server 2008中使用 CONCAT 函数。它不工作,因为它在该版本中是不可用的。

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

当我在谷歌上搜索 "如何 "时,我发现这里有一个帖子说用+ 来代替。 所以我试了一下。

$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]在将nvarchar值'22067-'转换为数据类型int时转换失败。

那么,我应该如何解决这个问题呢?

sql
sql-server
string
sql-server-2008
Björn C
Björn C
发布于 2019-09-27
3 个回答
Salman A
Salman A
发布于 2019-09-27
0 人赞同

+ 操作中,你正在混合数据类型。在这种情况下,SQL服务器将尝试把VARCHAR表达式转换为INT(这是根据数据类型优先规则进行的)。你需要明确地将INT转换为VARCHAR。

SELECT COALESCE(Project, '')
     + '-'
     + COALESCE(CAST(FLOOR_ID AS VARCHAR(11)), '')

CONCAT 如果参数是NULL,函数不会返回NULL。需要 ,以匹配该行为。COALESCE(..., '')

Tim Biegeleisen
Tim Biegeleisen
发布于 2019-09-27
已采纳
0 人赞同

试着将 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 是问题的根源。

非常好!谢谢你!
DuhVir
DuhVir
发布于 2019-09-27
0 人赞同

Project FLOOR_ID ,像这样铸成字符串------。