在SQL中将字符串转换为日期

时间:2013-09-16 20:22:35

标签: sql-server-2008 tsql varchar date-conversion

我需要将字符串转换为日期格式以获取该月的第一天和最后一天。

输入

DECLARE @InpDat AS VARCHAR(20) SET @InpDat = 201308

预期产出2013-08-31

我需要获得给定年月的第一天和最后一天。能帮助我做到这一点。

我尝试使用转换选项,但无法得到它。 ?

3 个答案:

答案 0 :(得分:1)

使用CAST(@InpDat + '01' AS DATE)将其转换为日期,并使用DateAdd作为日期算术。

DECLARE @InpDat AS VARCHAR(20) SET @InpDat = '201308'
DECLARE @Month DATE SET @Month = CAST(@InpDat + '01' AS DATE)

SELECT @MONTH AS First, 
       DATEADD(day, -1, DATEADD(month, 1, @MONTH)) AS Last

DEMO

答案 1 :(得分:0)

DECLARE @InpDat AS VARCHAR(20) 
SET @InpDat = '201308'

SELECT CONVERT(DATETIME(@InpDat+'01') AS FirstDate,
       DATEADD(dd,-1,DATEADD(mm,1,CONVERT(DATETIME(@InpDat+'01'))) AS LastDate

答案 2 :(得分:0)

为什么您希望随机数转换为日期格式而不会有任何哄骗?数据库是一个强大的工具,但不是神奇的。

您必须将数字解析为日期,然后按照您喜欢的方式格式化日期。我可能会建议这一系列的电话:

-- assume you can separate the year and month into separate parts.
-- use 01 as default day for now, we'll get last day shortly.
DECLARE @IntermediateDate AS DATE SET @IntermediateDate = DATEFROMPARTS(2013,08,01)
-- Advance the month by one, and subtract one day to find the last day of the month.
SET @IntermediateDate = DATEADD( dd, -1, DATEADD( mm, 1, @IntermediateDate))

现在使用您喜欢的格式化功能进行格式化。