1

私はに変換しようとしvarcharていbigintます:

select convert(bigint, (select(Replace((select value from sometable), ' ', ''))))

なぜエラーが発生するのですか?

データ型varcharをbigintに変換中にエラーが発生しました。

前もって感謝します

アップデート

これは私が試しているクエリの一部です:

select top 1 * 
into #tblTemp 
from testTable 
where Status = 0 
order by Sno

declare @mobile varchar(50)

set @mobile = (select(Replace((select mobile from #tblTemp), ' ', '')))

--set @mobile = (select( Replace(' 9428017524', ' ', '')))

select convert(bigint, @mobile)

drop table #tblTemp
4

2 に答える 2

2

これを試して

select convert(bigint, CASE WHEN ISNUMERIC(@mobile + 'e0') = 0 
                THEN 0 ELSE @mobile)

 -- add this case statement to return only numeric values,     
 -- your query will fail for values like '123-415-6789', '(123)415-6789'

携帯電話番号のデータを確認し、その列に予期しない値がないかどうかを確認します。またはなどを。に置き換える必要がある場合'-'があり'('ます。')'''

SeLECT * FROM #tblTmp
WHERE ISNUMERIC(Replace(mobile, ' ', '') + 'e0') = 0;
于 2012-12-12T08:24:32.553 に答える
1

あなたの本当の文字列が何であるかはわかりませんが、安全のためISNUMERIC()に変換前に確認することができます。

DECLARE @mobile varchar(50)
SELECT @mobile = REPLACE(mobile, ' ','') --much simplified version
FROM #tblTemp 

IF ISNUMERIC(@mobile)
   SELECT CONVERT(bigint, @mobile)
ELSE
   SELECT 0

クエリを読むだけで、you don't need a temp tableここにすべてが表示されます。すべてを1つのクエリで実行できます

SELECT TOP (1) CONVERT(bigint,  CASE ISNUMERIC( REPLACE(mobile,' ','') ) 
                                   WHEN 1 THEN REPLACE(mobile,' ','')
                                   ELSE 0 END )
FROM testTable 
WHERE Status = 0 
ORDER By Sno
于 2012-12-12T08:37:42.407 に答える