一些在我的表中的字段有格式错误的日期,他们在C#中使用的ToString()方法格式化但我犯了一个错字,并输入它是这样的:MM/dd/yyyy hh:mm/ss tt
现在,如果你仔细看看,你会看到MM/dd/yyyy hh:mm ---->' /'< --- ss
它被假设为':'
我然后之前修复它在我的C#代码,(意味着某些值被格式化:MM/DD/YYYY HH:MM:SS TT)
问题是,我试图选择日期的顺序从表中的值(我不能只是分类方式“Datefieldnamehere”),因为一些字段是在错误的格式用“/”
我试过的:
现在,我认为时间总是在同一个地方(而这对我来说很重要),我可以在时间中取出数字的子串并对它们进行排序;首先为AM然后PM
我可以为了通过MID([的ColumnName],11,2),MID([的ColumnName],14,2),MID([的ColumnName],16,2)因为每次约会无论分隔符是始终在格式M/DD/YYYY HH/MM/SS TT
所以我尝试:
(
SELECT SN, StatusCode, Time, Mid(Time,14,2) + ':'+ Mid(Time,17,2) AS TTI
FROM OrderStatus
WHERE StatusCode = 'Finished' and Left(Time,10) = '4/20/2012'
AND Time LIKE '*AM'
ORDER BY Val(Mid([Time],11,2)) DESC
)
UNION ALL (
SELECT SN, StatusCode, Time, Mid(Time,14,2) + ':'+ Mid(Time,17,2) AS TTI
FROM OrderStatus
WHERE StatusCode = 'Finished' and Left(Time,10) = '4/20/2012'
AND Time LIKE '*PM'
ORDER BY Val(Mid([Time],11,2)) DESC
);
只是为了看看日at会按小时订购,但它不会给我这个:
正如你可以看到它(在小时字段)01然后02然后它回到01 ...?
反正有一个类似的问题here,我已经把赏金上,如果你回答这个问题,还是这个问题,这将是了解其他情况,以及
编辑有用,你将获得赏金: 这个问题,我真的想回答如何按字符串的子串排序;对不起后期编辑我可以发誓我已经改变了这一点,说我想排序的任何字符串/日期/任何东西我想知道我可以做些什么,如: Order By Val(Mid(ColumnName,StartPos ,EndPos))
注意:该Order By给出完全错误的结果。
是但不是真的......,有21000+的记录,我不能简单地调用.replace因为有/的在日期之前将年月日之间,和我不能替换子字符串中的确切位置的值,因为某些日期在本月有10/11/12(额外的数字),我想我可以做一个if(date.length == 22)和21等等陪伴,但是这真的会挫败这个问题的目的以备将来使用。我真正想知道的是如何甚至有可能通过字符串的子字符串进行排序。 – 2012-04-23 18:06:05
虽然我会将它投票,但这是一个非常好的建议 – 2012-04-23 18:06:38
我认为它总是更好地解决问题,然后找到一个复杂的工作方式,而不必修复它。由于这是一次性的事情,你可以使用一个临时的日期字段和一个时间字段来分割所涉及的字段。然后一个简单的替换应该很容易。 (我发现它并没有回答按字符串排序的问题,但..)) – Johanness 2012-04-23 23:03:10