在 SQL 服务器中串联用补零分隔数字
Concatenation Breaks Numbers with Padded Zeros in SQL Server
我有一些无法工作的代码来连接两个字符串,其中一个是年份值,另一个是月份值,我将这两个字符串都从整数转换为字符串。月份还需要用前导零填充(一月是 01,而不是 1)。
所以,这是一个年月字段,应该阅读这个以反映 2020 年 1 月:
202001
我可以使用这个将月份填充到 2 位数字:
LEFT('00'+CAST(a.[Fiscal Month] as varchar(2)),2)) as [YearPeriod]
而且它是独立工作的。但是一旦我将它与年份连接起来,就像这样,
CAST(a.[Fiscal Year] as varchar(4)) + LEFT('00'+CAST(a.[Fiscal Month] as varchar(2)),2) as [Period]
然后我就没有一个月了。所有日期如下所示:
202000
我在这里做错了什么?我使用了各种语法(“concat”函数与 + 相对,以及在填充后转换为字符串与先转换)。我还尝试只用 1 位零填充,以为我用零切断了月份数。
我一直在格式化日期字段并处理这个问题,但我无法继续我需要完成的项目。串联是否以某种方式取消了月份字段?
要进入的字段是一个 nvarchar(6)
,因此在我的代码中,我将年份部分格式化为 nvarchar(4),将月份格式化为 nvarchar(2),希望添加时能正常工作一起。还有其他想法吗?
我认为这符合您的要求:
convert(varchar(6), a.[Fiscal Year] * 100 + a.[Fiscal Month])
我有一些无法工作的代码来连接两个字符串,其中一个是年份值,另一个是月份值,我将这两个字符串都从整数转换为字符串。月份还需要用前导零填充(一月是 01,而不是 1)。
所以,这是一个年月字段,应该阅读这个以反映 2020 年 1 月:
202001
我可以使用这个将月份填充到 2 位数字:
LEFT('00'+CAST(a.[Fiscal Month] as varchar(2)),2)) as [YearPeriod]
而且它是独立工作的。但是一旦我将它与年份连接起来,就像这样,
CAST(a.[Fiscal Year] as varchar(4)) + LEFT('00'+CAST(a.[Fiscal Month] as varchar(2)),2) as [Period]
然后我就没有一个月了。所有日期如下所示:
202000
我在这里做错了什么?我使用了各种语法(“concat”函数与 + 相对,以及在填充后转换为字符串与先转换)。我还尝试只用 1 位零填充,以为我用零切断了月份数。
我一直在格式化日期字段并处理这个问题,但我无法继续我需要完成的项目。串联是否以某种方式取消了月份字段?
要进入的字段是一个 nvarchar(6)
,因此在我的代码中,我将年份部分格式化为 nvarchar(4),将月份格式化为 nvarchar(2),希望添加时能正常工作一起。还有其他想法吗?
我认为这符合您的要求:
convert(varchar(6), a.[Fiscal Year] * 100 + a.[Fiscal Month])