2012-02-21 25 views
-2

以下のようなテーブルデータがあります。SQLクエリの順序

d1 date      sale_time 
    N 2012-03-09 00:00:00.000  TBD 
    No 2011-09-26 00:00:00.000  2:00 PM CT 
    N 2012-01-26 00:00:00.000  1:00 PM CT 
    N 2012-03-07 00:00:00.000  1:00 PM ET 
    yes 2012-02-23 00:00:00.000  Accepting Offers 

は、私は私がして試してみました

d1  date       sale_time 
    No 2011-09-26 00:00:00.000  2:00 PM CT 
    N 2012-01-26 00:00:00.000  1:00 PM CT  
    N 2012-03-07 00:00:00.000  1:00 PM ET 
    YEs 2012-02-23 00:00:00.000  Accepting Offers 
    N 2012-03-09 00:00:00.000  TBD 

のように入れてほしい日付ASC、販売時間ASC(発売時期は時間が含まれていない場合、それは最後のレコードを来る必要があります) によって、結果の順序をしたいですクエリの下にありますが、販売時間を日付に変換している間にエラーが発生しました。

select 
    * 
from 
    table 
order by 
    date asc, 
    convert(datetime, SUBSTRING(replace(sale_time,' ',''), 
    1, 
    (CHARINDEX(':',replace(sale_time,' ',''))+4))) asc 
+1

「販売時間に時間が含まれていない場合...販売時間を日付に変換中にエラーが発生しました」 – Paparazzi

+0

私のテーブルにそのようなデータがあります。そのような出力が必要です – Sree

+0

誰かがコメントを削除しましたか? OK;それらはどこに行くのですか、私たちはなぜ理由があるのでしょうか? –

答えて

0

多分これが役立ちます。

まずいくつかのテストデータ:次に

DECLARE @tbl TABLE(d1 VARCHAR(100),[date] DATETIME,sale_time VARCHAR(100)) 

INSERT INTO @tbl 
VALUES 
    ('N','2012-03-09 00:00:00.000','TBD'), 
    ('No','2011-09-26 00:00:00.000','2:00 PM CT'), 
    ('N','2012-01-26 00:00:00.000','1:00 PM CT'), 
    ('N','2012-03-07 00:00:00.000','1:00 PM ET'), 
    ('yes','2012-02-23 00:00:00.000','Accepting Offers') 

クエリ:

;WITH CTE AS 
(
    SELECT 
     (
      CASE 
       WHEN NOT CHARINDEX(':',sale_time)=0 
       THEN SUBSTRING(sale_time,0,5) 
       ELSE NULL 
      END 
     ) AS sale_time_format, 
     tbl.d1, 
     tbl.date, 
     tbl.sale_time 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    CTE.d1, 
    CTE.date, 
    CTE.sale_time 
FROM 
    CTE 
ORDER BY 
    CTE.sale_time_format DESC, 
    CTE.date 

をあなたがaccualyとして日付で注文する必要はありません。よく単にあなたが望む結果を得るためにsale_time_format。あなたはもっと多くのデータを持っているかもしれないので、私はそれを含んでいます。