在sql中将字符串转换为日期不完整的日期

时间:2014-11-14 21:46:59

标签: sql sql-server string date

我有一个nvarchar(20)字段用于存储日期,由于数据的性质,它不能存储为实际的Date数据类型,我需要能够在其上执行ORDER BY 。

问题是有些记录有完整的日期,例如" 01/01 / 2014"但其他领域只有一年。

我需要能够以这样的方式编写ORDER BY,无论它们是否有完整的日期,它仍然会以正确的日期顺序对记录进行排序。

2 个答案:

答案 0 :(得分:2)

在SQL Server中,您可以执行

select *
from yourTable
order by cast(yourDate as date)

对于任何一年只有一年的行,默认为该年的01/01。如果除了年份之外还有其他例外,您可以进行ISDATE()检查。

select *
from yourTable
where isdate(yourDate) = 1
order by cast(yourDate as date)

答案 1 :(得分:1)

在MySQL中你可以做到

select ifnull(
  str_to_date(datestring, '%m/%d/%Y'),
  str_to_date(concat(datestring, '-01-01'), '%Y-%m-%d')) as d
from t1 order by d

http://sqlfiddle.com/#!2/2d878/1