106

このエラーの意味がわかりません!

#1292 - Truncated incorrect DOUBLE value: 

double 値フィールドまたはデータがありません!

私はこれを理解しようとして1時間無駄にしました!

ここに私の質問があります

INSERT INTO call_managment_system.contact_numbers 
    (account_id, contact_number, contact_extension, main_number, created_by)
SELECT
    ac.account_id,
    REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') AS Phone,
    IFNULL(ta.ext, '') AS extention,
    '1' AS MainNumber,
    '2' AS created_by
FROM 
    cvsnumbers AS ta
    INNER JOIN accounts AS ac ON ac.company_code = ta.company_code
WHERE 
    LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(ta.phone_number, '-', ''), ' ', ''), ')', ''),'(','') ) = 10

ここに、結果が入るテーブルのshow create tableがあります

CREATE TABLE `contact_numbers` (  
    `number_id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
    `account_id` int(10) unsigned NOT NULL DEFAULT '0',  
    `person_id` int(11) NOT NULL DEFAULT '0',  
    `contact_number` char(15) NOT NULL,  
    `contact_extension` char(10) NOT NULL DEFAULT '',  
    `contact_type` enum('Primary','Direct','Cell','Fax','Home','Reception','Office','TollFree') NOT NULL DEFAULT 'Primary',  
    `contact_link` enum('Account','PDM','Other') NOT NULL DEFAULT 'Account',  
    `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 = inactive, 1=active', 
    `main_number` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 = main phone number',  
    `created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
    `created_by` int(11) NOT NULL,  
    `modified_on` datetime DEFAULT NULL,  
    `modified_by` int(11) NOT NULL DEFAULT '0',  
    PRIMARY KEY (`number_id`),  
    KEY `account_id` (`account_id`),  
    KEY `person_id` (`person_id`)
) ENGINE=InnoDB AUTO_INCREMENT=534 DEFAULT CHARSET=utf8
4

10 に答える 10

189

WHEREこのメッセージは、 orON句で数値と文字列を比較しようとしていることを意味します。あなたのクエリでは、それが発生する可能性のある唯一の潜在的な場所はON ac.company_code = ta.company_code; 同様の宣言があることを確認するか、明示的CASTに数値を文字列に変換してください。

モードをオフstrictにすると、エラーは警告に変わります。

于 2013-04-17T20:16:39.327 に答える
30

クエリに構文エラーまたは不要な文字があったため、このエラーを修正しましたが、MySQL はそれをキャッチできませんでした。and更新中に複数のフィールド間で使用していました。

update user 
set token='lamblala', 
    accessverion='dummy' and 
    key='somekey' 
where user = 'myself'

上記のクエリの問題はand、コンマ ( ,)に置き換えることで解決できます。

于 2016-06-30T06:32:17.113 に答える
11

私は同じ問題に直面していました。varchar(100) 列を数値 1 と比較しようとしました。1292 エラーが発生しました。1 ('1') の前後に一重引用符を追加することで修正されました。

上の説明ありがとう

于 2015-01-14T09:48:24.993 に答える
5

TL; DR

これはOR、文字列列/リテラル​​に適用することによっても発生する可能性があります。

完全版

INSERTビューを含む単純なステートメントに対して同じエラー メッセージが表示されました。

insert into t1 select * from v1

ただし、すべてのソースおよびターゲット列は型VARCHARでした。いくつかのデバッグの後、根本的な原因を見つけました。ビューには次のフラグメントが含まれていました:

string_col1 OR '_' OR string_col2 OR '_' OR string_col3

これはおそらく、Oracle からの次のスニペットの自動変換の結果でした。

string_col1 || '_' || string_col2 || '_' || string_col3

( ||Oracle では文字列連結です)。解決策は使用することでした

concat(string_col1, '_', string_col2, '_', string_col3)

代わりは。

于 2018-01-22T14:11:12.017 に答える
2

このエラーが発生するいくつかのケースを見てきました。

1.複数の値のリストを持つ句で!=不等号演算子を使用するwhereor

そのような:

where columnName !=('A'||'B')

これは、を使用して解決できます

where columnName not in ('A','B')

2. 関数に比較演算子がありませんif():

select if(col1,col1,col2);

col1値が存在する場合は値を選択し、それ以外の場合は値を表示するにはcol2...これはエラーをスローします。以下を使用して解決できます。

select if(col1!='',col1,col2);
于 2019-10-01T19:06:29.530 に答える
1

このエラーを受け取ったときはバグだと思いますが、SELECT ステートメントと同じ WHERE 句を使用して別のクエリを実行すると、その SELECT: SELECT CONCAT(primary_id, ',')) ステートメントからプライマリ ID を取得して挿入できることに注意してください。それらを条件付きの失敗した UPDATE クエリに追加します -> 「WHERE [primary_id] IN ([SELECT ステートメントからのコンマ区切りのプライマリ ID のリスト)」。これにより、元の (失敗した) クエリの WHERE 句によって引き起こされる問題を軽減できます。

個人的には、「WHERE ____ IN ([values here])」の値に引用符を使用していたとき、予想される 300 のエントリのうち 10 のみが影響を受けていましたが、これはバグのように思えます。

于 2016-04-04T16:42:06.680 に答える
0

を渡そうとしたときに、ES6 と TypeORM でこの問題が発生しました.where("order.id IN (:orders)", { orders })。ここordersで、カンマ区切りの数字の文字列でした。テンプレートリテラルに変換したら、問題は解決しました。

.where(`order.id IN (${orders})`);
于 2019-09-06T15:27:59.803 に答える
0

文字列フィールド長のテーブルでCHECK CONSTRAINTを使用した場合

例: ユーザー名の長さ >= 8 を確認するには

使用する:

CHECK (CHAR_LENGTH(username)>=8)

それ以外の

CHECK (username>=8)

間違ったデータ型の比較がある場合は、チェック制約を修正します

于 2020-02-04T08:05:46.500 に答える
0

double 値のフィールドまたはデータがない場合は、SQL の厳密モードを無効にしてみてください。

これを行うには、MySQL インストール フォルダーにある " my.ini " ファイルを編集する必要があります。"Set the SQL mode to strict" 行を見つけて、以下の行を変更します。

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

これに、「STRICT_TRANS_TABLES」を削除します

# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

その後、MySQL サービスを再起動してこの変更を有効にする必要があります。

変更を確認するには、エディターを開いて次の sql 文を実行します。

SHOW VARIABLES LIKE 'sql_mode';

非常に重要:保存後のファイル形式に注意してください。サービスが再起動しないため、「UTF8」として保存し、「TFT8 with BOM」として保存しないでください。

于 2020-06-25T19:31:47.857 に答える