我正在编写一个函数,它具有参数@terminationMonthYear,数据类型为nvarchar,
我需要将上面的参数转换为datetime。
例如:如果我通过(2013年1月)。我需要它在sql server中使用datetime数据类型转换为特定月份'2013-01-01'的第一天。
提前致谢
试试这个(在这个例子中,@ 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)。
如果你通过“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)))
如果您知道您的格式总是“月,年”,您可以通过用,
替换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)
convert()
函数将'01 -January-2013'转换为有效日期。您只需在字符串的开头添加01并将逗号变为破折号:
convert(date, '01-' + replace(@terminationMonthYear, ',', '-')
SQL CAST功能非常通用:
SELECT CAST('January,2013' AS DATETIME)
返回'2013-01-01 00:00:00.000',我相信这正是您所寻找的。时间信息似乎是多余的,因此请考虑将其转换为DATE。