2009-05-28 5 views
14

SQL SelectでTRY CATCHブロックを使用できますか?たとえば、次のようなもののためSelectステートメントのCONVERTでCATYをトライする

select 
    order, 
    CONVERT(DATETIME, orderDate) 
from orders 

このシナリオを処理する最良の方法は何ですか?

+2

を参照してください。日付時刻。それがIsDateのポイントです。 – cjk

+0

@ JohnIdol:「標準」とはどういう意味ですか? ISOは、標準の例です。 orderDateにはどのようなフォーマットがありますか? – Sung

+0

申し訳ありません - 私は混乱していました - IsDateは問題ありません! orderDateがVarCharの場合 – JohnIdol

答えて

20

)私はのtry-catchを知りませんが、SQL Serverでは、あなたはISDATE機能を持っており、あなたのためには(関数ISDATEを使用することができます

CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DateTime, orderDate) ELSE GETDATE() END 
+0

は機能しません – Cherven

+6

日付の形式が異なる場合はどうなりますか? – Asher

1

のようなものが行うことができます。

SELECT ISDATE('11/13/2009') 
SELECT ISDATE('13/11/2009') 
2

SELECT節自体には、私はトライキャッチは選択の内側に可能であると思いますが、外部のストアドプロシージャで作業している時に可能ですしていないISDATE()

select 
    order, 
    CASE WHEN ISDATE(orderDate) = 1 THEN CONVERT(DATETIME, orderDate) ELSE NULL END 
from orders 
1

を使用しても

あなたは、日付のためにテストすることができます。 MS SQL Serverの2012年

begin try 
    select cast(strartnr as int) from table 
end try 
begin catch 
    select 10000 from table 
end catch 
10

を求めているまさに行い、新たな構築物があります:


SELECT 
    CASE WHEN TRY_CONVERT(float, 'test') IS NULL 
    THEN 'Cast failed' 
    ELSE 'Cast succeeded' 
END AS Result; 
    GO 

は、IsDate関数がtrueの場合、あなたのようにそれをキャストすることができ、またhttp://msdn.microsoft.com/en-us/library/hh230993.aspx

+2

本当に素敵なxDですが、これは2012年のSQLでうまくいきますよね? – MaikaDalila

+0

@MaikaDalila:そうです。 – user10633

関連する問題