Tsql concat使用空格作为分隔符标记问题,而不是空格

Tsql concat使用空格作为分隔符标记问题,而不是空格,tsql,concat,Tsql,Concat,这个问题 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

这个问题

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)
显示了这一点

我不明白为什么“被翻译成”

艾米:好吗


关于

您在示例中发布的空格是CHAR(63)的非真实空格:CHAR(32)

我直接从你的帖子中复制/粘贴了空格。请注意:
选择ASCII(' ')
Retutns 63.我将空格复制到CONCAT中,如下所示:
SELECT CONCAT('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');

您在示例中发布的空间是CHAR(63)的非实空间:CHAR(32)

我直接从您的帖子中复制/粘贴空格。请注意:
SELECT ASCII('s ')
Retutns 63.我将空格复制到CONCAT中,如下所示:
SELECT CONCAT('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');

这是来自SQL Server Management Studio的吗?通常情况下,这是因为您的客户端不知道如何渲染角色,而角色会被替换为其他默认角色。这是来自SQL Server Management Studio的吗?通常情况下,这是因为您的客户端不知道如何渲染角色,而角色会被替换使用其他默认字符。