如何按包含按升序排列的日期的varchar字段进行排序

时间:2015-05-12 08:26:53

标签: sql sql-server

在设计时,我们将[DOJInGovrService]字段设为varchar数据类型 现在,当我们按此参数(DOJInGovrService)按升序尝试排序时,它没有给出所需的结果 我知道这是数据类型问题,但我现在无法更改数据类型,因为已经输入了数据。

SELECT ED.class, 
       ED.CurrentOfficePlace, 
       ED.DOB, 
       ED.DOJInCurrentOff, 
       ED.DOJInGovrService, 
       ED.DOJInSamvarg, 
       ED.EmpName, 
       ED.HomePlace, ED.Qualification 
FROM tbl_EmplyeesBiodata ED
ORDER BY DOJInGovrService asc

输入日期的格式为dd-MM-yyyy(即28-08-2004)。

请帮帮我

2 个答案:

答案 0 :(得分:2)

尝试将其转换为日期时间

select ED.class,ED.CurrentOfficePlace,ED.DOB,ED.DOJInCurrentOff,ED.DOJInGovrService,ED.DOJInSamvarg,ED.EmpName,ED.HomePlace,ED.Qualification 
from tbl_EmplyeesBiodata ED 
order by convert(date,DOJInGovrService,105) asc

这只是直接解决方案。最好的方法是使用date类型创建新列。该列可帮助您创建不castconvert

的查询

答案 1 :(得分:2)

这只是始终使用适当数据类型的众多原因之一 即使表中有数据,也可以使用alter table ddl语句更改数据类型:

ALTER TABLE tableName
ALTER COLUMN ColumnName datetime2;

但是,您应该首先复制此表并尝试复制,这样如果它弄乱了您的数据,您将不会冒任何风险。
如果改变成功,那么在你的直播桌上进行。如果没有,你可以采用不同的方法,涉及这些阶段:

  1. DOJInGovrService列重命名为DOJInGovrService_olduse sp_RENAME.
  2. 使用DOJInGovrService ddl stement添加具有正确数据类型(datetime2)的列alter table
  3. 使用DOJInGovrService中的值更新新的DOJInGovrService_old列。您可能需要使用convert
  4. 使用DOJInGovrService_old ddl语句删除alter table列。