从sql server表中拆分并选择特定值

时间:2013-03-07 09:27:06

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

我在SQL服务器中有一个表项目,其中的字段为StartDate,其值为

15-02-2013 15:02:40
20-08-2011 10:11:20

等 我需要从中检索不同的年份值 仅2013 and 2011 我试过像

这样的查询
select (case when charindex(' ', StartDate) > 0
             then left(StartDate, charindex(' ', (StartDate))-1)
             else StartDate
        end) as StartDate FROM [kneipp].[dbo].[kn_projects]

将结果显示为 15-02-2013 and 20-08-2011

select (case when charindex('-', StartDate) > 0
             then right(StartDate, charindex('-', reverse(StartDate))-1)
             else StartDate
        end) as lastone FROM [kneipp].[dbo].[kn_projects]

得到 2013 15:02:40 and 2011 10:11:20

如何实现我的预期结果

3 个答案:

答案 0 :(得分:1)

你试过这样的表达吗?

SELECT distinct year( convert(datetime,StartDate,105)) 
FROM [kneipp].[dbo].[kn_projects]

答案 1 :(得分:0)

您可以将列转换为DATETIME格式

SELECT YEAR(CAST(StartDate AS DATETIME)) FROM [kneipp].[dbo].[kn_projects]

答案 2 :(得分:0)

正如其他人指出您可以转换为datetime,如果您想保留数据类型,请尝试以下查询

Declare @t varchar(50),@t1 varchar(50)
set @t='15-02-2013 15:02:40'

Select left(parsename(replace(@t,'-','.'),1),4)

如果您有任何格式的日期时间,请尝试以下表达式,该表达式将返回varchar数据类型中的年份

Select left(parsename(replace(@t1,'-','.'),1),
            charindex(' ',parsename(replace(@t1,'-','.'),1)))