连接列不返回完整结果

问题描述 投票:0回答:2

我有一个表,希望将4列连接在一起;其中2个是整数,1个文本和1个日期。

我通过将整数转换为varchar并格式化日期将它们连接在一起。但是我有一个例子,其中最后一项没有显示

SELECT 
    CAST(CONTRACT_ID VARCHAR(15)) + '-' +
    CAST(CONTRACT_TYPE AS VARCHAR(15))  + '-' +
    GENDER + '-' + FORMAT(DOB, 'yyyy') AS UNIQUE_ID

有四行应具有相同的输出,然后它们将有所不同。

- 12345678-70-M -1948
- 12345678-70-M
- 12345678-70-M
- 12345678-70-M

但是当结果作为文本运行时,将返回正确的结果

- 12345678-70-M -1948
- 12345678-70-M -1948
- 12345678-70-M -1948
- 12345678-70-M -1948

这不是网格内的视觉错误,因为如果我对其进行过滤,它将仅返回1行。

但是我确实注意到,如果我将性别强制转换为varchar(1),则结果确实有效。性别字段末尾是否可能存在引起问题的隐藏字符。

它似乎在99%的时间内都能正常工作。

sql-server concatenation
2个回答
0
投票

这表明GENDER中有空格-或其他字符。试试这个:

SELECT CONCAT(CONTRACT_ID, '-', CONTRACT_TYPE, '-',
              LTRIM(RTRIM(GENDER)), '-', YEAR(DOB)
             ) AS UNIQUE_ID

0
投票

尝试以下查询。

create table test (CONTRACT_ID VARCHAR(15),
CONTRACT_TYPE VARCHAR(15),
GENDER Char(1),
DOB Datetime
)

 Insert into test Values
('12345678', '70', 'M', Getdate()),
('12345678', '70', 'M', Getdate()),
('12345678', '70', 'M', Getdate()),
('12345678', '70', 'M', Getdate())

Select * from test

SELECT 
    CAST(CONTRACT_ID as VARCHAR(15)) + '-' +
    CAST(CONTRACT_TYPE AS VARCHAR(15))  + '-' +
    GENDER + '-' + FORMAT(DOB, 'yyyy') AS UNIQUE_ID
    from test

这里是db<>fiddle演示。

© www.soinside.com 2019 - 2024. All rights reserved.