mysql - sql条件插入(insert value if not null or insert null)

标签 mysql sql insert

我有一张 table (订单)。用于在表顺序中插入数据的表单包含一些可选字段。这意味着某些字段可以有数据或为空。 我已经在数据库中将这些字段设置为“可为空”。

我想写一个sql查询,像这样:

(如果 :data 不为 null,则插入 :data 否则插入 null)。

:此处的数据是提交表单中的字段值。

我已经尝试过 IFNULL、ISNULL,但似乎无法正常工作,因为我遇到了一些错误,例如“×无法执行 SQL 语句:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册以了解正确的语法在……附近使用”

我该如何编写这样的查询?

编辑:

这是来自 Modather Sadik 的查询

 insert into [table] (data) Values ((CASE WHEN @d IS NULL OR datalength(@d) = 0 THEN NULL ELSE @d END))

该查询对应于我想要实现的目标。我试过这个:

INSERT INTO commande 
        VALUES (
               null,
               :date_ajout,
               CASE WHEN :etat_commande IS NULL OR datalength(:etat_commande) = 0 THEN NULL ELSE :etat_commande END,
               CASE WHEN :lieu_commande IS NULL OR datalength(:lieu_commande) = 0 THEN NULL ELSE :lieu_commande END,
               CASE WHEN :rappel IS NULL OR datalength(:rappel) = 0 THEN NULL ELSE :rappel END,
               CASE WHEN :avec_avance IS NULL OR datalength(:avec_avance) = 0 THEN NULL ELSE :avec_avance END,
               CASE WHEN :article_nom IS NULL OR datalength(:article_nom) = 0 THEN NULL ELSE :article_nom END,
               CASE WHEN :article_reference IS NULL OR datalength(:article_reference) = 0 THEN NULL ELSE :article_reference END,
               CASE WHEN :article_quantite IS NULL OR datalength(:article_quantite) = 0 THEN NULL ELSE :article_quantite END,
               CASE WHEN :article_prix IS NULL OR datalength(:article_prix) = 0 THEN NULL ELSE :article_prix END,
               CASE WHEN :article_description IS NULL OR datalength(:article_description) = 0 THEN NULL ELSE :article_description END,
               CASE WHEN :article_site_web IS NULL OR datalength(:article_site_web) = 0 THEN NULL ELSE :article_site_web END,
               CASE WHEN :article_image1 IS NULL OR datalength(:article_image1) = 0 THEN NULL ELSE :article_image1 END,
               CASE WHEN :article_image2 IS NULL OR datalength(:article_image2) = 0 THEN NULL ELSE :article_image2 END,
               CASE WHEN :id_transporteur IS NULL OR datalength(:id_transporteur) = 0 THEN NULL ELSE :id_transporteur END,
               :id_employe,
               CASE WHEN :id_client IS NULL OR datalength(:id_client) = 0 THEN NULL ELSE :id_client END,
               CASE WHEN :id_fournisseur IS NULL OR datalength(:id_fournisseur) = 0 THEN NULL ELSE :id_fournisseur END,
               CASE WHEN :date_depart_livraison IS NULL OR datalength(:date_depart_livraison) = 0 THEN NULL ELSE :date_depart_livraison END,
               CASE WHEN :date_livraison IS NULL OR datalength(:date_livraison) = 0 THEN NULL ELSE :date_livraison END,
               CASE WHEN :montant_avance IS NULL OR datalength(:montant_avance) = 0 THEN NULL ELSE :montant_avance END,
               CASE WHEN :mode_paiement IS NULL OR datalength(:mode_paiement) = 0 THEN NULL ELSE :mode_paiement END,
               CASE WHEN :etat_paiement IS NULL OR datalength(:etat_paiement) = 0 THEN NULL ELSE :etat_paiement END,
               CASE WHEN :prix_achat IS NULL OR datalength(:prix_achat) = 0 THEN NULL ELSE :prix_achat END,
               CASE WHEN :prix_de_vente IS NULL OR datalength(:prix_de_vente) = 0 THEN NULL ELSE :prix_de_vente END,
               CASE WHEN :montant_a_payer IS NULL OR datalength(:montant_a_payer) = 0 THEN NULL ELSE :montant_a_payer END,
               CASE WHEN :frais_livraison IS NULL OR datalength(:frais_livraison) = 0 THEN NULL ELSE :frais_livraison END,
               CASE WHEN :infos_frais IS NULL OR datalength(:infos_frais) = 0 THEN NULL ELSE :infos_frais END,
               CASE WHEN :benefice IS NULL OR datalength(:benefice) = 0 THEN NULL ELSE :benefice END
               );

但是我有这个错误:

Cannot execute SQL statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':article_image1 IS NULL OR datalength(:article_image1) = 0 THEN NULL ELSE :artic' at line 15

最佳答案

这段代码:

 insert into [table] (data) 
     Values ((CASE WHEN @d IS NULL OR datalength(@d) = 0 THEN NULL ELSE @d END))

将检查值是否为 null 或为空,如果是,它将插入 null,否则将插入发送的值。

肯定会从您的表单中填写@d 作为参数。

关于mysql - sql条件插入(insert value if not null or insert null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47054425/

相关文章:

php - Laravel Eloquent PHP 如何获取 MySQL 表中以唯一列值作为键的所有行

mysql 日期与日期时间默认值

c# - 创建新的和删除和插入模式

hadoop - hive :使用选择1插入带有列的 hive 表

c++ - AVL树插入方法导致段错误

mysql - 我有一个 N-N 关系数据,如何通过 mysql 设计我的数据库

mysql - 如何在 mysql 5.5.8 中设置 inno db

php - MYSQL_FIELD_NAME 相当于 SQL SERVER

php - 改进使用 PDO 的 SELECT 并添加 UPDATE 语句

mysql - 为什么即使我使用 'validate' Hibernate 也总是丢弃数据库中的数据?