concat использует пробел в качестве разделителя отмечает вопросы вместо пробела - PullRequest
1 голос
/ 11 февраля 2020

Этот запрос

SELECT  Empleados.U_Sociedad as Sociedad, 
    Empleados.empID AS empId, 
    CONCAT(Empleados.firstName , ' ' , Empleados.middleName , ' ' , Empleados.lastName)  as Nombre,
    sum(
        case 
            when durtype = 'm' 
            then duration/ 60 
            else duration 
        end
        ) as Realizado ,
    0 as Planificado,
    'Horas' as Concepto 
FROM OHEM Empleados   
JOIN OUSR Usuarios ON Empleados.U_CODEMPL = Usuarios.USER_CODE   
JOIN OCLG Horas ON Usuarios.INTERNAL_K = Horas.AttendUser   
WHERE(Horas.U_Fase ='w0000005') 
group by U_Sociedad, empID ,CONCAT(Empleados.firstName , ' ' , Empleados.middleName , ' ' , Empleados.lastName)

Показывает это result

Я не понимаю, почему '' переводится в '?'

Эми, пожалуйста, пожалуйста?

С уважением

1 Ответ

3 голосов
/ 11 февраля 2020

Пробелы, которые вы разместили в своем примере, являются не настоящими пробелами CHAR (63): CHAR (32).

Копирую / вставляю пробелы прямо из вашего поста. Обратите внимание, что это: SELECT ASCII(' ') Retutns 63. Я скопировал пробелы в CONCAT следующим образом: SELECT CONCAT('a', ' ' , 'a', ' ' , 'x'); возвращает: a? A? X

Вы можете явно указать CHAR(32) пробелов, например, так:

SELECT CONCAT('a', CHAR(32) , 'b', CHAR(32), 'c'); 

Или, чтобы не вводить CHAR (32) снова и снова, вы можете сделать это:

SELECT CONCAT('a',Sp,'b',Sp, 'c')
FROM (VALUES(CHAR(32))) AS s(Sp);

ИЛИ, если вы SQL Server 2017+, вы можете использовать CONCAT_WS следующим образом :

SELECT CONCAT_WS(CHAR(32),'a','b','c');
...