SQL 服务器:子字符串前导零计数已关闭

SQL Server: substring leading zero counting is off

我试图从一个日期创建 3 个单独的字段,现在我 运行 遇到了这个问题。当(DDMMYYYY欧式)日期如04032017时,代码:

SELECT SUBSTRING(CAST(04032017 AS VARCHAR(38)), 2, 2) AS Month

returns 03(完美)。

但是当代码像(第一个零现在是 1!)时:

SELECT SUBSTRING(CAST(18022017 AS VARCHAR(38)), 2, 2) AS Month

结果是 80,因为 SUBSTRING 现在是从 (1) 第一个位置开始计数,在第一个示例中它以 4 作为起点。

显然我需要 1 个代码来应对所有事件,但我就是没弄对。

一些帮助将不胜感激!

问候,J

您可能需要将其解析为 varchar,然后转换为有效日期并使用 month() 函数以获得清晰的方法

declare @date nvarchar(10)='18022017'
select Month(cast(CONCAT(SUBSTRING(@date,3,2),'/',SUBSTRING(@date,1,2),'/',SUBSTRING(@date,5,4)) as date))

这应该适合你:

select SUBSTRING(right('00000000' + CAST(04032017 AS varchar(38)),8), 3, 2) as Month

好的,刚刚解决了。只需删除演员表(为什么我首先使用它?)并在日期周围加上单引号:

select SUBSTRING('04032017'), 2, 2) as Month

这很好用!