0

我有一个包含值 01 May 2013 的 varchar 变量,我需要获取 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 Conversion failed。

我尝试了各种组合,有点徒劳。请注意我在查询中需要它。请帮忙。

4

7 回答 7

2

如果这是您要转换的唯一日期,则可以将 SQL 语句简化为:

select datepart(mm,convert(datetime,'01 May 2013'))
于 2013-09-28T00:28:57.487 回答
1

我只是用它来测试它并且它有效:

declare @t as varchar(333)
set @t = '01 May 2013'

select datepart(mm,convert(datetime, @t))

给我

5

如果您仍然收到该转换错误,那么您可能有一些NULL 值一些格式不正确的日期值。检查表中的数据,看看它是什么。

于 2013-09-27T23:24:01.337 回答
0

可能只是子字符串参数中有 3 而不是 2:

SUBSTRING(FISCAL_MONTH,1, 2 )+'2013'),100))

也可能有效: select DATEPART concat (MM, CONCAT('01/', substring(convert(varchar(15),'03/23/2013'),1,2),'/2013'));

于 2013-09-27T23:36:09.247 回答
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
于 2013-09-27T23:00:54.527 回答
0

哇,看到人们想出的所有奇怪的代码真的很有趣。我大部分时间都使用 KISS 策略(保持简单愚蠢)。

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
于 2013-09-28T00:00:36.830 回答
0

Select month ( cast ( date_col as datetime )) From table

于 2013-09-28T01:58:09.973 回答
0

您必须使用正确的格式进行转换,您必须在转换中传递适当的格式样式值。根据 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
于 2013-09-28T03:32:11.203 回答