java - 如何解决where name like '%%' 当name 为null时,查询不到数据?
PHP中文网
PHP中文网 2017-04-18 10:44:56
0
12
1799
PHP中文网
PHP中文网

认证0级讲师

répondre à tous(12)
巴扎黑

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

迷茫

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

大家讲道理

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

Peter_Zhu

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 ?

Peter_Zhu

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.

左手右手慢动作

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.

左手右手慢动作

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

Ty80

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. .
刘奇

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. .

Peter_Zhu

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal