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
这很好用!
我试图从一个日期创建 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
这很好用!