SQLクエリを使用して文字列を整数に変換する


回答:


297

CASTまたはCONVERTを使用できます。

SELECT CAST(MyVarcharCol AS INT) FROM Table

SELECT CONVERT(INT, MyVarcharCol) FROM Table

4
フィールドの1つが数値でない場合、どのようにして例外をキャッチ/防止できますか?私はそれが0に変換することが期待されるだろう
クロエ

40
見つけた:select CASE WHEN ISNUMERIC('x') = 1 THEN CAST('x' AS INT) ELSE 0 END
クロエ

9
一言だけ: IsNumeric()いくつかの不可解な結果を生成することができます。文字列 "-。"に対してTRUEを返しますが、それを数値にキャストしようとするとエラーが発生します。
Curt

3
IsNumericは、文字列が "-5"や "-20"などの数値である場合にのみ、 "-"を含む文字列に対してtrueになり、 "5-"、 "-2-1"のような文字列に対してはfalseになります。したがって、isNumeric()がtrueの場合、変換で例外がスローされないはずです
Pratyush Dhanuka '22

11

また、数値文字列'56.72'からINT に変換する場合、SQLエラーが発生する可能性があることに注意してください。

Conversion failed when converting the varchar value '56.72' to data type int.

これを回避するには、次のように2つの変換を実行します。

STRING-> NUMERIC-> INT

または

SELECT CAST(CAST (MyVarcharCol AS NUMERIC(19,4)) AS INT)

TableAからTableBにデータをコピーする場合、変換は暗黙的であるため、2番目の変換は必要ありません(最も近いINTに切り捨てても問題ない場合)。

INSERT INTO TableB (MyIntCol)
SELECT CAST(MyVarcharCol AS NUMERIC(19,4)) as [MyIntCol]
FROM TableA

8

SQL Server 2012以降では、TRY_PARSEまたはTRY_CONVERTを使用できます。

SELECT TRY_PARSE(MyVarcharCol as int)

SELECT TRY_CONVERT(int, MyVarcharCol)

SQL Server 2005に関連していたため、元の質問に対する正解ではありませんが、2019年であり、そのような古いバージョンのSQL Serverに縛られている人が少ないため、この回答は間違いなく役立ちます。
shaune

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.