1

日時値と文字列値を持つvarchar列があります。日時の値で並べ替えて、すべての文字列値を下部にリストする必要があります。日時には次のものがあります。

ORDER BY CAST(q2.[Due Date] AS DATETIME) 

しかし、私の結果には、結果全体で「保留中」という値があります。「保留中」をリストの一番下に表示する必要があります。

4

2 に答える 2

2

日付以外の値のみが「保留中」の場合、これはほとんどの SQL エンジンで機能するはずです。

order by (case when q2.[Due Date] = 'On Hold' then 0 else 1 end) desc,
         (case when q2.[Due Date] <> 'On Hold' then cast(q2.[Due Date] as datetime) end)

ただし、日付を文字列として保存する場合は、'YYYY-MM-DD HH:MI:SS' の形式を使用することをお勧めします。これにより、変換を行わなくても並べ替えることができます。

それらがこの形式の場合、次のようなものを使用できます。

order by (case when left([Due Date], 1) between '0' and '9' then 0 else 1 end),
         [Due Date]

(数字は文字の前にソートされるため、ほとんどの場合、[期日] で並べ替えるだけで機能します。ただし、任意の文字列が他の非アルファベット文字で始まる可能性があります。)

于 2012-12-07T15:42:08.130 に答える
2

お使いのプラットフォームが不明ですが、SQL Server では次のように記述できます。

SELECT q2.[Due Date]
FROM yourTable q2
ORDER BY ISDATE(q2.[Due Date]) DESC;
于 2012-12-07T15:37:49.013 に答える