recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 如何解决where name like '%%' 当name 为null时,查询不到数据?

PHP中文网PHP中文网2804 Il y a quelques jours1818

répondre à tous(12)je répondrai

  • 巴扎黑

    巴扎黑2017-04-18 10:46:56

    SÉLECTIONNER

    *

    DE

    test

    1 = 1

    ET NOM COMME concat(

    '%',
    (
        CASE
        WHEN NAME(传进来的name) IS NULL THEN
            '#################'(数据库name不可能的值)
        ELSE
            NAME(传进来的name)
        END
    ),
    '%')

    J'ai écrit un dépannage pour le nom, vous pouvez vérifier l'autre vous-même, ce n'est peut-être pas la meilleure solution

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:46:56

    Vous pouvez l'écrire en logique métier, pas nécessairement en SQL

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:46:56

    Je ne sais pas si un framework de base de données est utilisé. Si c'est le cas, il existe généralement des solutions correspondantes.
    Par exemple, dans mybatis, vous pouvez utiliser iftest pour déterminer si l'instruction like doit être exécutée.

    Une autre méthode consiste à utiliser les fonctions de la base de données elle-même, comme IF (expr1, expr2, expr3) ou IF ELSE

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    S'il n'y a pas de paramètres d'entrée au front-end, pourquoi avez-vous besoin d'interroger les résultats de ce champ ? Cela ne viole-t-il pas la logique métier ?

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
    Si name est null et convertissez-le en empty string, alors %% correspondra.


    Cependant, je pense que le meilleur moyen est d'utiliser SQL pour ajouter un jugement logique. Le nombre de modifications doit être très faible et cela ne nécessite que quelques lignes de code. Le questionneur peut jeter un œil au SQL de @家菜菜 et ajouter une condition where 1=1 Il sera alors très simple d'ajouter une condition à la condition if.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

    Il est préférable de l'écrire dans la couche de logique métier (c'est ce que cette couche est censée faire). Ne gérez pas ce genre de chose dans la couche de base de données. C'est très déraisonnable et inefficace.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

    Le moyen simple est de convertir la valeur nulle du tableau en ''
    where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
    Si vous ne tenez pas compte de l'efficacité, tout ira bien

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:46:56

    Le questionneur souhaite simplement intégrer les conditions de requête sur l'interface dans la condition Where de l'instruction SQL. Ceci est en effet très pratique dans le traitement du programme. Cependant, pour des raisons de sécurité, il est préférable de ne pas le faire car il existe du SQL. risque d'injection.

    S'il s'agit d'une application interne, l'environnement est en effet très sécurisé Compte tenu des performances, il est quand même recommandé de gérer la logique d'épissage du code SQL. Sans ce paramètre, n'épelez pas la clause Where correspondante. si c'est Java, il peut s'écrire comme :

    String whereClause = "where xxxxxx"
                         +("".equals(nameStr) ? "" : "name like '%"+nameStr+"%'")
                         +("".equals(methodStr) ? "" : "method like '%"+methodStr+"%'")

    *Voici les hypothèses :

    1. nameStr et methodStr sont respectivement le contenu d'entrée de l'utilisateur obtenu à partir de l'interface. Si l'utilisateur ne saisit pas, le résultat sera une chaîne vide au lieu de null

    2. .
    3. xxxxxx sont d'autres conditions Where. S'il n'y a vraiment pas d'autres conditions, alors vous devez gérer la chaîne "where" elle-même*

    4. .

    répondre
    0
  • 怪我咯

    怪我咯2017-04-18 10:46:56

    Si la valeur par défaut de la base de données est nulle, ou lorsque la valeur obtenue est nulle, remplacez-la par nu. .

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    où nom='' ou méthode ='' ou nom comme '%%' et méthode comme '%%'

    répondre
    0
  • Annulerrépondre