我有一个nvarchar(20)字段用于存储日期,由于数据的性质,它不能存储为实际的Date数据类型,我需要能够在其上执行ORDER BY 。
问题是有些记录有完整的日期,例如" 01/01 / 2014"但其他领域只有一年。
我需要能够以这样的方式编写ORDER BY,无论它们是否有完整的日期,它仍然会以正确的日期顺序对记录进行排序。
答案 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