Использовать подборку в CONCAT

Я пытался объединить 2 столбца с пробелом между ними и получил ошибку сопоставления:

SELECT DISTINCT
    p.PERSON_ID,
    p.ID_NUMBER,
    CONCAT(p.FULLNAMES, CONCAT(' ', p.SURNAME)) AS NAME,
    o.ORG_NAME,
    w.WARD_DESCRIPTION AS WARD,
    ess.DESCRIPTION AS SECTOR

Не удается разрешить конфликт сортировки между «SQL_Latin1_General_CP1_CI_AS» и «Latin1_General_CI_AS» в операции concat.

Сопоставление обоих оскорбительных столбцов в моей базе данных: Latin1_General_CI_AS

Итак, я пытался сопоставить пробелы с этим сопоставлением, но я понятия не имею, как это сделать. Моя попытка:

CONCAT(p.FULLNAMES, (CONCAT((COLLATE Latin1_General_CI_AS = ' '), p.SURNAME))) AS NAME,

или что-то?


person Carel    schedule 15.05.2014    source источник


Ответы (3)


Вы ставите COLLATE после каждого поля, а именно в худшем случае:

SELECT DISTINCT
    CONCAT(p.FULLNAMES COLLATE Latin1_General_CI_AS, 
      (CONCAT(' ' COLLATE Latin1_General_CI_AS, 
          p.SURNAME COLLATE Latin1_General_CI_AS))) AS NAME
FROM Person p
person StuartLC    schedule 15.05.2014
comment
Вероятно, вы можете избежать сопоставления литералов, сопоставляя их с помощью DATABASE_DEFAULT, а именно SELECT DISTINCT CONCAT(p.FULLNAMES COLLATE DATABASE_DEFAULT, (CONCAT(' ', p.SURNAME COLLATE DATABASE_DEFAULT))) AS NAME FROM Person p - person StuartLC; 15.05.2014
comment
@StuartLC, который может испортить ваш «заказ». Лучше изменить пространство на ту же сортировку, что и другие столбцы. - person t-clausen.dk; 15.05.2014

Это решит вашу проблему:

SELECT CONCAT(p.FULLNAMES,' ' collate Latin1_General_CI_AS,p.SURNAME) AS NAME

Пространство получает то же сопоставление по умолчанию, что и база данных, поэтому оно должно иметь такое же сопоставление, что и ваши столбцы. Как-то глупо на мой взгляд

person t-clausen.dk    schedule 15.05.2014

Я исправил эту проблему, просто используя оператор concat:

p.FULLNAMES + ' ' + p.SURNAME
person user764754    schedule 13.05.2015