我正在做一个数据库,其中选择了就业开始日期和结束日期,然后显示
我的代码是这样的:
Concat(WorkExperience.StartYr, ' ',WorkExperience.StartMonth,' to ',
IsNULL(WorkExperience.EndYr,''),
IsNULL(WorkExperience.EndMonth,'Current Job '), '--',
WorkExperience.PositionLevel,'(',CompanyTable.CompanyName,')'
) AS 'Employment History'
在WorkExperience.StartYr中,存在空值。其数据类型为int
我的结果是:
1990 Jul to 1992 May--Executive(MidEast Bank)
1993 Jan to 0Current Job --Director(Astons System and Maintenance)
1980 Jan to 1982 May--Executive(Huat Heng Construction)
1984 Jun to 1990 Dec--Manager(Good Earth PTE LTD)
1991 Feb to 0Current Job --Senior Management(Huat Heng Construction)
1999 Apr to 0Current Job --Manager(MidEast Bank)
2012 Aug to 0Current Job --Jr Executive(Huat Heng Construction)
我想去掉第2、5、6和7行中的"0"获取
1993 Jan to Current Job --Director(Astons System and Maintenance)
我该怎么做?
编辑:感谢您的帮助,问题已修复
您可以使用:
Concat(WorkExperience.StartYr, ' ',
WorkExperience.StartMonth, ' to ',
WorkExperience.EndYr,
coalesce(WorkExperience.EndMonth, ' Current Job '), '--',
WorkExperience.PositionLevel,
'(',CompanyTable.CompanyName, ')'
) AS Employment_History
也就是说,移除ISNULL()
。CONCAT()
忽略NULL
的值。您认为正在用空字符串替换NULL
值。但是,该列是一个数字,因此ISNULL()
的结果被转换为一个数字。因此CCD_ 7。
请注意,我还将列的名称更改为Employment_History
,因此不需要对其进行转义。一般来说,字符串和日期常量只能使用单引号。列名不要使用单引号。它们很容易与字符串常量混淆。
由于数据类型的优先级,您需要在ISNULL
之前转换EndYr
。
或者另一种选择是使用第二个CONCAT
,它将为您转换。
CONCAT(
WorkExperience.StartYr,
' ',
WorkExperience.StartMonth,
' to ',
ISNULL(
CAST(WorkExperience.EndYr AS varchar(4)) + ' ' + WorkExperience.EndMonth
,'Current Job '),
'--',
WorkExperience.PositionLevel,
'(',
CompanyTable.CompanyName,
')'
) AS [Employment History]
CONCAT(
WorkExperience.StartYr,
' ',
WorkExperience.StartMonth,
' to ',
ISNULL(
CONCAT(WorkExperience.EndYr, ' ', WorkExperience.EndMonth)
,'Current Job '),
'--',
WorkExperience.PositionLevel,
'(',
CompanyTable.CompanyName,
')'
) AS [Employment History]