24

私はテーブルを持っています:

Account_Code | Desc
503100       | account xxx
503103       | account xxx
503104       | account xxx
503102A      | account xxx
503110B      | account xxx

はどこAccount_Codeですかvarchar

以下のクエリを作成すると:

Select 
  cast(account_code as numeric(20,0)) as account_code,
  descr 
from account 
where isnumeric(account_code) = 1

列に有効な数値を持つすべてのレコードを返すことでうまく機能しaccount_codeます。

しかし、以前のSQLにネストされた別の選択を追加しようとすると:

select account_code,descr 
from 
(
  Select cast(account_code as numeric(20, 0)) as account_code,descr 
  from account 
  where isnumeric(account_code) = 1
) a 
WHERE account_code between 503100 and 503105

クエリはエラーを返します

データ型 varchar から数値への変換中にエラーが発生しました。

そこで何が起こっているのですか?

有効な場合は既に数値に変換していaccount_codeますが、クエリはまだ無効なレコードを処理しようとしているようです。

BETWEENクエリで句を使用する必要があり ます。

4

6 に答える 6

9

SQL Server 2012 以降を実行している場合は、新しいTRY_PARSE()関数も使用できます。

要求されたデータ型に変換された式の結果を返します。SQL Server でキャストが失敗した場合は null を返します。TRY_PARSE は、文字列から日付/時刻および数値型に変換する場合にのみ使用してください。

またはTRY_CONVERT / TRY_CAST :

キャストが成功した場合は、指定されたデータ型にキャストされた値を返します。それ以外の場合は null を返します。

于 2013-08-08T13:02:38.723 に答える
1

ありがとう、代わりにこれを試してください

Select 
  STR(account_code) as account_code_Numeric,
  descr 
from account 
where  STR(account_code) = 1

喜んでお手伝いさせていただきます

于 2014-08-19T12:16:14.973 に答える