我有一个表,希望将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%的时间内都能正常工作。
这表明GENDER
中有空格-或其他字符。试试这个:
SELECT CONCAT(CONTRACT_ID, '-', CONTRACT_TYPE, '-',
LTRIM(RTRIM(GENDER)), '-', YEAR(DOB)
) AS UNIQUE_ID
尝试以下查询。
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演示。