我正在尝试在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时,转换失败。
那么,我该如何解决呢?
答案 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)
像这样将Project
和FLOOR_ID
投射为字符串-
CAST(Project AS VARCHAR("MAX LENGTH OF PROJECT FIELD"))
与FLOOR_ID相同