Альтернативная функция CONCAT в SQL Server 2008 - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь использовать функцию CONCAT в SQL Server 2008. Она не работает, потому что она недоступна в этой версии:

$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] [Драйвер ODBC 17 для SQL Server] [SQL Server] Преобразование не удалось при преобразовании значения nvarchar'22067-' для типа данных int.

Итак, как мне решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 27 сентября 2019

Вы смешиваете типы данных для операции +.В этом случае SQL-сервер попытается преобразовать выражение VARCHAR в INT (это делается в соответствии с правилами приоритета типа данных).Вам необходимо явно привести INT к VARCHAR:

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

CONCAT функция не возвращает NULL, если аргументы NULL.COALESCE(..., '') требуется, чтобы соответствовать поведению.

2 голосов
/ 27 сентября 2019

Попробуйте преобразовать 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.

0 голосов
/ 27 сентября 2019

Cast Project и FLOOR_ID в String, как это -

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

и то же самое для FLOOR_ID

...