【问题标题】:SQL Server: substring leading zero counting is offSQL Server:子字符串前导零计数已关闭
【发布时间】:2017-10-20 13:01:47
【问题描述】:

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

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

返回03(完美)。

但是当代码是这样的时候(第一个零现在是 1!):

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

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

显然,我需要为所有出现的事件提供 1 个代码,但我就是不正确。

我们将不胜感激!

问候,J

【问题讨论】:

  • 重写为CAST('DDMMYYYY' AS VARCHAR) 有可能吗?
  • 04032017 被解释为 int 而不是字符串,4032017 也是如此。

标签: sql-server casting substring zero


【解决方案1】:

这应该适合你:

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

【讨论】:

  • 对其进行了测试,这似乎工作得很好!谢谢!只是自己以不同的方式解决了它。
【解决方案2】:

您可能需要将其解析为 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))

【讨论】:

    【解决方案3】:

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

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

    这很好用!

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      相关资源
      最近更新 更多