拆分并从sqlserver表中选择特定值
我在SQL server中有一个表项目,其中有一个字段StartDate,其值为拆分并从sqlserver表中选择特定值,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我在SQL server中有一个表项目,其中有一个字段StartDate,其值为 15-02-2013 15:02:40 20-08-2011 10:11:20 等 我需要从中检索不同的年份值,如 2013年和2011年仅限 我试过这样的问题 select (case when charindex(' ', StartDate) > 0 then left(StartDate, charindex(' ', (StartDate))-1)
15-02-2013 15:02:40
20-08-2011 10:11:20
等
我需要从中检索不同的年份值,如
2013年和2011年
仅限
我试过这样的问题
select (case when charindex(' ', StartDate) > 0
then left(StartDate, charindex(' ', (StartDate))-1)
else StartDate
end) as StartDate FROM [kneipp].[dbo].[kn_projects]
其结果为2013年2月15日和2011年8月20日
和
获得2013 15:02:40和2011 10:11:20
如何实现我的预期结果您可以将该列转换为日期时间格式
SELECT YEAR(CAST(StartDate AS DATETIME)) FROM [kneipp].[dbo].[kn_projects]
你试过这样的表达吗
SELECT distinct year( convert(datetime,StartDate,105))
FROM [kneipp].[dbo].[kn_projects]
正如其他人指出的,您可以转换为datetime,如果您想保留数据类型,请尝试下面的查询
Declare @t varchar(50),@t1 varchar(50)
set @t='15-02-2013 15:02:40'
Select left(parsename(replace(@t,'-','.'),1),4)
如果有任何格式的datetime,请尝试下面的表达式,该表达式将以varchar数据类型返回年份
Select left(parsename(replace(@t1,'-','.'),1),
charindex(' ',parsename(replace(@t1,'-','.'),1)))
StartDate列的类型是什么?它的类型是varchar…….varchar(50)它的格式是否总是像“dd-mm-yyy”?为什么不直接使用
子字符串(startdate,7,4)
呢?@JakubKania这是一个很好的解决方案。使用DISTINCT很好。谢谢:)我也想到了这一点,但担心在我的源代码中的许多地方会出现一些代码更改和中断,我理解,但是你会有一个非常复杂的语句,你可能应该在你的应用程序中这样做。或者在插入之前检查格式。我收到一个错误,如“将字符数据类型转换为日期时间数据类型导致日期时间值超出范围。”运行查询
Select left(parsename(replace(@t1,'-','.'),1),
charindex(' ',parsename(replace(@t1,'-','.'),1)))