我的varchar变量包含值2013年5月1日,我需要获取Month部分的整数。
例如,如果输入2013年5月1日,我应该得到结果为5
我写的查询是:
select DATEPART(MM,CONVERT(DATETIME,CONVERT(VARCHAR(15),'01 '+SUBSTRING(FISCAL_MONTH,1,3)+' 2013'),100))
FROM <table name>
此处FISCAL_MONTH是表格中的列名。但是,此查询向我显示结果,例如11月11日,但也抛出以下错误: Msg 241,Level 16,State 1,Line 1 从字符串转换日期和/或时间时转换失败。
我尝试了各种组合,徒劳无功。请注意,我在查询中需要它。请帮助。
答案 0 :(得分:2)
如果这是您要转换的唯一日期,则可以将SQL语句简化为:
select datepart(mm,convert(datetime,'01 May 2013'))
答案 1 :(得分:1)
我只是用它进行测试并且有效:
declare @t as varchar(333)
set @t = '01 May 2013'
select datepart(mm,convert(datetime, @t))
给我
5
如果您仍然遇到转换错误,那么您要么有一些 NULL值或某些日期值不正确的日期值。检查表格中的数据,看看它是什么。
答案 2 :(得分:0)
我会留给你添加剩下的几个月。
select case substring('01 MAY 2013',4,3) when 'JAN' then 1
when 'FEB' then 2
when 'MAR' then 3
when 'APR' then 4
when 'MAY' then 5
when 'JUN' then 6 else 9999 end
答案 3 :(得分:0)
可能只是在substring参数中有3而不是2:
SUBSTRING(FISCAL_MONTH,1, 2 )+'2013'),100))
concat
也可能有效:
选择DATEPART(MM,CONCAT('01 /',子串(转换(varchar(15),'03/23/2013'),1,2),'/ 2013'));
答案 4 :(得分:0)
MONTH()函数怎么样?它一直是TSQL语言。我甚至投入了一个联合来处理任何意外的NULLS。
-- Simple date as text
declare @var_test varchar(20) = '01 may 2013';
-- Use coalesce to handle nulls, use month to return int
select month(coalesce(@var_test, '01 jan 1900')) as my_month_index
答案 5 :(得分:0)
Select month ( cast ( date_col as datetime ))
From table
答案 6 :(得分:0)
您必须使用正确的格式进行转换,您必须在转换时传递apprpriate格式样式的值。根据MSDN,您使用的是“dd mon yy”格式,因此您必须提供相应的格式样式代码6或106
Declare @FISCAL_MONTH nvarchar(max) = '01 May 2013'
select datepart(mm,Convert(datetime, @FISCAL_MONTH, 6))
--5
Set @FISCAL_MONTH = '01 November 2013'
select datepart(mm,Convert(datetime, @FISCAL_MONTH, 6))
--11