好吧,如果这是来自数据库?
那么你可以这样做:
SELECT id, FirstName, LastName, Age,
cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) as integer) as NumAge
FROM tblCustomers
ORDER BY NumAge
所以,现在您有一个文本显示列,但您也有一个真实的“数字”列,其中包含实际年数 - 您可以在该 NumAge 列上正确排序。而且这种排序也可以通过数据视图排序来完成 - 因此,无论您正在/正在对数据进行排序,如果您添加上述从该列中提取数字的列,则按 NumAge 排序将成为一种可能的选择。
如果我们没有月份和年份的混合,现在上述方法有效。但是,为了解决这个问题,我们将上面的内容改为:
SELECT id, FirstName, LastName, Age,
CASE
WHEN CharIndex('month',Age) > 0 THEN
(cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) as integer))
WHEN CharIndex('year',Age) > 0 THEN
(cast(SUBSTRING(Age,1,Charindex(' ',Age)-1 ) * 12 as integer))
END
AS AgeInMonths
FROM tblCustomers
ORDER BY AgeInMonths
所以,再一次,我们现在有了一个以月为单位的数字和值来表示年龄,并且可以对其进行排序。所以我们显示 Age + text 列,但是排序表达式可以使用 AgeInMonths 并且结果是正确顺序的数据。
如果你有日子呢?然后我会使用月 * 30 来代替月 * 12,而对于年,则只需使用 * 365。因此,支持年、月或日并不难。
结果再次是按给定年龄按数字顺序排序的数据。