如何将(月份名称,年份)转换为日期时间格式

时间:2014-08-25 14:18:51

标签: sql sql-server sql-server-2008

我正在编写一个函数,其参数@terminationMonthYear的数据类型为nvarchar,

我需要将上面的参数转换为datetime。

例如:如果我通过(2013年1月)。我需要将其转换为该特定月份的第一天' 2013-01-01'在sql server中使用datetime数据类型。

提前致谢

4 个答案:

答案 0 :(得分:1)

如果您通过“2013年1月”,它将起作用

@MonthName  Varchar(50)
Declare @FromDate datetime, @ToDate datetime
Select @FromDate = Convert(Datetime,@MonthName), @ToDate = DateAdd(d,-1,DateAdd(m,1,Convert(Datetime,@MonthName)))

答案 1 :(得分:0)

试试这个(在这个例子中,@ Date表示@terminationMonthYear):

DECLARE @Date NVARCHAR(50) = 'February ,2013'
DECLARE @Month NVARCHAR(50) = LTRIM(RTRIM(LEFT(@Date, PATINDEX('%,%',@Date)-1)))
DECLARE @Year NVARCHAR(50) = LTRIM(RTRIM(RIGHT(@Date, LEN(@Date) - PATINDEX('%,%',@Date))))
SELECT CAST(@Month + ' 01, ' + @Year AS DATE)

如果你的输入参数包含(),那么试试这个:

DECLARE @Date NVARCHAR(50) = '(February ,2013)'
   SET @Date = REPLACE(REPLACE(@Date,'(',''),')','')
DECLARE @Month NVARCHAR(50) = LTRIM(RTRIM(LEFT(@Date, PATINDEX('%,%',@Date)-1)))
DECLARE @Year NVARCHAR(50) = LTRIM(RTRIM(RIGHT(@Date, LEN(@Date) - PATINDEX('%,%',@Date))))
SELECT CAST(@Month + ' 01, ' + @Year AS DATE)

无论您传入完整的月份名称还是3个字母的缩写(例如3月份的Mar),这都会有效。此外,您提到要将其转换为DATETIME格式,但2013-01-01是DATE(无时间组件)。如果你想要一个时间组件,你可以将最后一行的CAST更改为" ... AS DATETIME"它会添加一个时间组件(虽然它将全部为0')。

答案 2 :(得分:0)

如果你知道你的格式将永远是"月,年"您是否可以仅使用,替换01,来执行以下操作:

DECLARE @input VARCHAR(100)
SET @input = 'January, 2014'
DECLARE @newinput VARCHAR(100) 
SET @newinput = REPLACE(@input, ',', ' 01,')

SELECT CAST(@newinput AS DATETIME)

或者如果您只想要一个班轮版本:

SELECT CAST(REPLACE(@input, ',', ' 01,') AS DATETIME)

要简单得多,但是你需要确保格式输入是正确的,但你可能也会遇到几乎所有类型的解析解决方案的问题。

编辑:评论您可能需要摆脱括号也很容易:

SELECT CAST(REPLACE(REPLACE(REPLACE(@input, ',', ' 01,'), ')', ''), '(', '') AS DATETIME)

答案 3 :(得分:0)

convert()功能会将'01 -January-2013'转换为有效日期。您只需要在字符串的开头添加01并将逗号变为破折号:

convert(date, '01-' + replace(@terminationMonthYear, ',', '-')