【发布时间】:2012-04-23 17:50:14
【问题描述】:
问题:
我表中的某些字段的日期格式错误,它们是使用 C# 中的 .ToString() 方法进行格式化的,但我打错了,输入如下:MM/dd/yyyy hh:mm/ss tt
现在,如果您仔细观察,您会看到 MM/dd/yyyy hh:mm ----> '/'
假设是 ':'
然后我在我的 c# 代码中修复它,(意味着一些值被格式化:MM/dd/yyyy hh:mm:ss tt)
问题是,我正在尝试按日期顺序从表中选择值(我不能只按“日期字段名称此处”排序),因为某些字段的格式错误,带有“/”
我尝试了什么:
现在,我想既然时间总是在同一个地方(这对我来说很重要),我可以只取时间中数字的子字符串并对其进行排序;首先是 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
);
只是想看看是否会按小时订购,但它没有给我这个:
如您所见(在小时字段中)01 然后 02 然后又回到 01...?
无论如何有一个类似的问题here我已经悬赏,如果你回答这个问题或那个问题,你将获得赏金,这对于其他情况也很有用
编辑: 我真正想回答的问题是如何按字符串的子字符串排序;对不起,我可以发誓我已经改变了这个,说我想按任何字符串/日期/任何我想知道如何做的事情的单个数字排序: 按 Val 排序(Mid(ColumnName,StartPos,EndPos))
注意: Order By 给出完全错误的结果。
【问题讨论】:
-
是的,但不是真的...,有 21000 多条记录,我不能简单地调用 .replace,因为之前的日期中有 / 来划分年月日,我无法替换值在子字符串中的确切位置,因为某些日期在月份中有 10/11/12(一个额外的数字),我想我可以做一个 if(date.length == 22) 和 21 等来陪伴,但这确实违背了这个问题供将来使用的目的。我真正想知道的是如果可能的话,如何按列中字符串的子字符串排序..
-
这是一个非常好的建议,虽然我会投赞成票
-
我认为解决问题总是更好,然后找到一种复杂的方法来完成工作而不必修复它。由于这将是一次性的事情,因此您可以使用一个临时字段作为日期,使用一个临时字段来拆分有问题的字段。然后简单的替换应该很容易。 (我看到它没有回答按子字符串排序的问题......;))