SQL Server 2008中的CONCAT函数替代

时间:2019-09-27 10:07:53

标签: sql sql-server string 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的“如何”时,我在这里找到了一条帖子,说使用+代替。所以我尝试了:

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

但我收到此消息:

  

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

那么,我该如何解决呢?

3 个答案:

答案 0 :(得分:6)

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

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

CONCAT函数不会返回NULL。需要COALESCE(..., '')才能匹配行为。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

像这样将ProjectFLOOR_ID投射为字符串-

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

与FLOOR_ID相同