SQL Server:子字符串前导零计数已关闭

时间:2017-05-20 13:11:23

标签: sql-server casting substring zero

我正在尝试从日期创建3个单独的字段,现在我遇到了这个问题。当(DDMMYYYY欧洲风格)日期类似于public function validator(Request $request) { // validation $this->validate($request, array( 'title' => 'required|max:255', 'slug' => 'required|alpha_dash|min:5|max:255|unique:posts,slug', 'body' => 'required' )); 时,代码为:

04032017

返回SELECT SUBSTRING(CAST(04032017 AS VARCHAR(38)), 2, 2) AS Month (完美)。

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

03

结果为80,因为SELECT SUBSTRING(CAST(18022017 AS VARCHAR(38)), 2, 2) AS Month 现在从(1)第一个位置开始计算,而在第一个例子中,它以4为起点。

显然我需要为所有事件都有1个代码,但我只是没有把它弄好。

一些帮助将不胜感激!

问候,J

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这应该适合你:

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

答案 2 :(得分:0)

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

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

这很好用!