我正在尝试从日期创建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
答案 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
这很好用!