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

将sql中日期不完整的字符串转换为日期,sql,sql-server,string,date,Sql,Sql Server,String,Date,我有一个nvarchar(20)字段,用于存储日期,由于数据的性质,它不能存储为实际的日期数据类型,我需要能够在上下订单。 问题是有些记录有完整日期,如“01/01/2014”,但其他字段只有一年。 我需要能够以这样一种方式写入订单,即无论他们是否有完整的日期,它仍然会以正确的日期顺序对记录进行排序。在SQL Server中,您可以这样做 select * from yourTable order by cast(yourDate as date) select ifnull( str_t

我有一个nvarchar(20)字段,用于存储日期,由于数据的性质,它不能存储为实际的日期数据类型,我需要能够在上下订单。 问题是有些记录有完整日期,如“01/01/2014”,但其他字段只有一年。
我需要能够以这样一种方式写入订单,即无论他们是否有完整的日期,它仍然会以正确的日期顺序对记录进行排序。

在SQL Server中,您可以这样做

select *
from yourTable
order by cast(yourDate as date)
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
对于任何只有一年的行,它将默认为该年的01/01。如果存在除年份以外的其他异常,您可以执行
ISDATE()
检查

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

在SQL Server中,您可以执行以下操作

select *
from yourTable
order by cast(yourDate as date)
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
对于任何只有一年的行,它将默认为该年的01/01。如果存在除年份以外的其他异常,您可以执行
ISDATE()
检查

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

在SQL Server中,您可以执行以下操作

select *
from yourTable
order by cast(yourDate as date)
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
对于任何只有一年的行,它将默认为该年的01/01。如果存在除年份以外的其他异常,您可以执行
ISDATE()
检查

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

在SQL Server中,您可以执行以下操作

select *
from yourTable
order by cast(yourDate as date)
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
对于任何只有一年的行,它将默认为该年的01/01。如果存在除年份以外的其他异常,您可以执行
ISDATE()
检查

select *
from yourTable
where isdate(yourDate) = 1
order by cast(yourDate as date)
在MySQL中,您可以

select *
from yourTable
order by cast(yourDate as date)
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
在MySQL中,您可以

select *
from yourTable
order by cast(yourDate as date)
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
在MySQL中,您可以

select *
from yourTable
order by cast(yourDate as date)
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
在MySQL中,您可以

select *
from yourTable
order by cast(yourDate as date)
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

如果列中包含“BOB”,您将如何按照正确的顺序对其进行排序?如果只是一年,您可以将01/01/连接到该年,但无法知道这是否正确。如果列中包含“BOB”,您将如何建议按正确顺序排序?如果只是一年,您可以将01/01/连接到该年,但无法知道这是否正确。如果列中包含“BOB”,您将如何建议按正确顺序排序?如果只是一年,您可以将01/01/连接到该年,但无法知道这是否正确。如果列中包含“BOB”,您将如何建议按正确顺序排序?如果只是一年,你可以将01/01/与年份连接起来,但是没有办法知道这是否正确。这很酷。我没有意识到MS SQL会这样转换年份。哇,我也没有意识到它会这样转换日期,但这是完美的,简单的。这很酷。我没有意识到MS SQL会这样转换年份。哇,我也没有意识到它会这样转换日期,但这是完美的,简单的。这很酷。我没有意识到MS SQL会这样转换年份。哇,我也没有意识到它会这样转换日期,但这是完美的,简单的。这很酷。我没有意识到MS SQL会这样转换年份。哇,我也没有意识到它会这样转换日期,但这很完美,也很简单。