3

SQLステートメントを実行しようとしています

SELECT * 
FROM Menu
WHERE ISNumeric(Data) = 1
AND Data = 296

Dataフィールドには、数値または数値以外の内容が含まれる場合があります。しかし、次のような構文エラーが発生しています

データ型 int の列の varchar-value '/home' を変換する際の構文エラー。

4

3 に答える 3

4

列はvarcharであるため、値( 296)を一重引用符でDATA囲む必要があります

SELECT * 
FROM   Menu
WHERE  ISNumeric(Data) = 1 AND Data = '296'

ここを使用せずに直接クエリを実行できISNUMERIC、すべてのレコードで数値をチェックする必要がないため、パフォーマンスが向上します。

あなたの状況では、使用するIsNumericことは無意味だと思います。

SELECT * 
FROM   Menu
WHERE  Data = '296'
于 2012-11-23T09:41:42.330 に答える
1

残念ながら、SQLは短絡評価を保証しないため、最初の条件がfalseの場合、IsNumeric(Data)フィルターは2番目の述部の評価を妨げません。Data = 296

ただし、できることは、比較をcharリテラルとして残すことです。

SELECT * 
FROM Menu
WHERE ISNumeric(Data) = 1
AND Data = '296';

興味深いことに、IsNumeric正確な数値と比較している場合、なぜチェックを行う必要があるのでしょうか。

于 2012-11-23T09:41:25.563 に答える
0

@StuartLCの回答に追加するだけで、これに対する1つの回避策は、サブクエリを使用して最初にすべての数値を取得することです。

SELECT *
FROM   (
    SELECT CAST(Data AS int) AS Data, 
           -- Other fields
    FROM   Menu
    WHERE  ISNumeric(Data) = 1
) subquery
WHERE subquery.Data = 296

ただし、IsNumeric はこれらに対して返されるため、10 進数、科学表記法、またはそのようなものがないことを確認する必要があることに注意して1ください。この質問は、その周りの問題を解決するのに役立ちます...

于 2012-11-23T09:45:51.140 に答える