7

インポートの結果であるデータベースがあります。データベースは成果物です。私は自分でインポートを行っていませんし、元のデータにアクセスして自分でインポートすることもできません。そうは言っても、テキスト データ型にインポートされた整数値があります。格納された値はすべて有効な整数です。私は得続けます:

Explicit conversion from data type text to int is not allowed.

テーブルのフィールドのデータ型を変更しようとすると。また、テーブルに新しい INT フィールドを作成し、TEXT フィールドの値に基づいて更新しようとしましたが、同じエラーが発生します。最後に、新しいテーブルを作成して古い値を挿入しようとしましたが、int に変換またはキャストできませんでした。

4

3 に答える 3

17

これはうまくいくようです:CONVERT(INT, CONVERT(VARCHAR(MAX),myText))

編集:

内部変換に最適な選択が何であるかは完全にはわかりません...またはのいずれかを選択するとVARCHAR(N)、切り捨てによってオーバーフローを防止できないという利点があります(その場合、オーバーフローが好ましい動作であると仮定します)。N > 10VARCHAR(MAX)

また、への変換では、INT先頭のスペースをゼロとして扱うようです。したがってVARCHAR(MAX)、誤ってゼロになる可能性が低くなります。例えば:

CREATE TABLE #foo ( bar TEXT )

INSERT INTO #foo
VALUES ('                                                 10')

SELECT CONVERT (INT, CONVERT(VARCHAR(MAX),bar)) FROM #foo -- 10
SELECT CONVERT (INT, CONVERT(VARCHAR(10),bar)) FROM #foo -- 0

おそらく最善の方法は、何らかの検証を行って、入力が要件を満たしていることを確認することです。

于 2013-03-11T18:51:53.317 に答える
0

テキスト型を varchar(x) に変換する必要があります。その後、int にキャストまたは変換できます。二重変換を避けるために、キャストを好みます。

CAST(CONVERT(VARCHAR(50),CONFIG_VALUE) AS INT)

完全な例:

DECLARE @age int;

SET @age = (SELECT CAST(CONVERT(varchar(50),@yourTextVarHere) AS INT))
SELECT @age
于 2018-07-10T11:52:35.573 に答える