如何将varchar字符串解析为三列,年,月和日

时间:2014-09-08 17:17:31

标签: sql sql-server parsing

我认为解决格式不佳的表的一种方法是将“日期”列解析为三列,之后我可以正确地运行查询。日期格式为'ddmmmyyyy'样式(31DEC2013)。

如何将此字符串解析为“day”,“month”,“year”三个不同的列。

提前致谢

4 个答案:

答案 0 :(得分:4)

您正在尝试将数据从一种WRONG类型转换为另一种WRONG类型。这是一个日期值,您应该使用适当的数据类型DATEDATETIME

使用适当的数据类型保存此数据将允许您访问许多日期时间函数以进行数据操作。

测试数据

DECLARE @TABLE TABLE(String_Month VARCHAR(9))
INSERT INTO @TABLE VALUES 
 ('31DEC2013')
,('26NOV2013')
,('22SEP2013')
,('31DEC2013')
,('31DEC2013')

查询

SELECT CAST(  CAST(DATEPART(YEAR, String_Month) AS VARCHAR(4))  + '-'
            + CAST(DATEPART(MONTH, String_Month)  AS VARCHAR(2))+ '-'
            + CAST(DATEPART(DAY, String_Month)  AS VARCHAR(2)) AS DATE) AS Result
FROM @TABLE

结果

Result
2013-12-31
2013-11-26
2013-09-22
2013-12-31
2013-12-31

答案 1 :(得分:3)

试试这个:

select datepart(day, '31DEC2013') as [day], 
       datepart(month, '31DEC2013') as [month],
       datepart(year, '31DEC2013') as [year]

答案 2 :(得分:2)

DATEPART命令可以为您完成。例如:

select datepart(day, '31DEC2013')
select datepart(month, '31DEC2013')
select datepart(year, '31DEC2013')

我建议您将日期保留在一列中,并在查询中动态使用datepart。

答案 3 :(得分:1)

由于您将值存储为字符串,因此您需要将其转换为DataTime,然后使用DatePart。或者在字符串值

上使用子字符串

DatePart

select  datepart(DAY, cast([date] as datetime)) as [day], 
        datepart(MONTH, cast([date] as datetime)) as [month],
        datepart(YEAR, cast([date] as datetime)) as [year]

Substring

select  SUBSTRING([date], 0, 2) as [day], 
        SUBSTRING([date], 2, 3) as [month],
        SUBSTRING([date], 5, 4) as [year]