TRY_CONVERT() はありません。 または TRY_CAST() ただし、XML の内部キャストを使用して null 許容型に変換できます。
これを試してください
DECLARE @tbl TABLE(SomeInt VARCHAR(100)); INSERT INTO @tbl VALUES('123') ,('blah') --bad data SELECT t.* ,CAST('' AS XML).value('sql:column("t.SomeInt") cast as xs:int?','int') FROM @tbl t;プレ>ハックのビット...しかし、何とか美しい;-)
説明
CAST('' AS XML)実際の XML を取得するためのトリックにすぎません XML のネイティブ メソッドを使用するため。sql:column()XQueryです - セットの列をXQueryに含めることができる関数 (sql:variableを使用) 変数用)
cast as xs:int?文字列を int-value として解析しようとし、これが機能しない場合は NULL を返します。制限は次のとおりです。これは常にシステムのデフォルトを使用します (
TRY_CASTと同様) )。TRY_CONVERTを使用 3 番目のパラメーターを使用すると、出力をより細かく制御できます...ヒント:
XQuery/Xpath厳密に大文字と小文字が区別されます。xs:dateTime?があります。 、ただし、xs:datetimeでエラーが発生します ...