這樣的SQL拼接語句是怎麼回事?

问题描述

selectcount(ht_admin_id)fromht_adminwhere','+ht_admin_group+','like'%,1,%'andht_admin_name='haitian'

這條SQL是怎麼回事,拼接的時候為什麼需要加字符逗號????

解决方案

解决方案二:
代表字符串啊example'1'+'aaa'='1aaaa'
解决方案三:
那加逗號的原因是什麼?
解决方案四:
引用1楼hdt的回复:

代表字符串啊example'1'+'aaa'='1aaaa'

那加逗號的原因是什麼?
解决方案五:
逗号是字符串的一部分
解决方案六:
就是找到含“,1,”的字符串
解决方案七:
逗号应该是字符串中的字符,不是通配符,是查询含有,1,所有数据,你放在数据库查询一下就清楚了,通配符说明_与任意单字符匹配%与包含一个或多个字符的字符串匹配[]与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。[^]与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。
解决方案八:
引用4楼hdt的回复:

逗号是字符串的一部分

where后面的,还有+,这是什么意思?
解决方案九:
引用6楼wind_cloud2011的回复:

逗号应该是字符串中的字符,不是通配符,是查询含有,1,所有数据,你放在数据库查询一下就清楚了,通配符说明_与任意单字符匹配%与包含一个或多个字符的字符串匹配[]与特定范围(例如,[a-f])或特定集(例如,[abcdef])中的任意单字符匹配。[^]与特定范围(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意单字符匹配。

where后面的,还有+,这是什么意思?
解决方案十:
用一种语言至少要把它的基本规则掌握,否则你解决一个问题,又会碰上另外一个。跟别说用它来表达意思
解决方案十一:
你看一下你的数据库,ht_admin_group是ht_admin表中的字段否?你把这句放在数据库查询一下就容易清楚
解决方案十二:
引用2楼zhaogao333的回复:

那加逗號的原因是什麼?

他怕错误匹配“26121”。这种字段设计本身很成问题。
解决方案十三:
ht_admin_group中可能包括“,1,”,也可能就是一个数字“1”。
解决方案十四:
他的字符串应该是类似这样的1,2,3,4,5,6,7假设不包含逗号使用like'%1%'则类似‘5,10,2,3’这样的字符串也会被匹配出来,此字符串值中不包含数字1,和需求就不一致了
解决方案十五:
之前有看过某软件就是这样配置权限的。将全部界面编码,例如1~20。如果这个人有界面3、5、14的权限,权限表中的权限字段就存放:3,5,14这样在判断某个界面(如界面6)有没有权限时,就判断“,6,”是否在“,3,5,14,”之中。
解决方案:
逗号就代表一个字符而已····
解决方案:
ht_admin_group字段的内容类似是这样的1,10,101,11010,1,110,10110,110,101,1直接用whereht_admin_grouplike'%,1,%'查询只能查出10,1,110,101会漏掉1,10,101,11010,110,101,1用where','+ht_admin_group+','like'%,1,%'查就不会漏了
解决方案:
引用楼主zhaogao333的回复:

selectcount(ht_admin_id)fromht_adminwhere','+ht_admin_group+','like'%,1,%'andht_admin_name='haitian'

這條SQL是怎麼回事,拼接的時候為什麼需要加字符逗號????

--','+ht_admin_group+','=',1,12,13,14,'--like'%,1,%'假如不加逗号,会是什么情况,加了逗号又是什么情况,你试试就知道了。

解决方案:
引用13楼bw555的回复:

他的字符串应该是类似这样的1,2,3,4,5,6,7假设不包含逗号使用like'%1%'则类似‘5,10,2,3’这样的字符串也会被匹配出来,此字符串值中不包含数字1,和需求就不一致了

13楼正解
解决方案:
引用16楼CityBird的回复:

ht_admin_group字段的内容类似是这样的1,10,101,11010,1,110,10110,110,101,1直接用whereht_admin_grouplike'%,1,%'查询只能查出10,1,110,101会漏掉1,10,101,11010,110,101,1用where','+ht_admin_group+','like'%,1,%'查就不会漏了

感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?
解决方案:
引用19楼zhaogao333的回复:

感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?

whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇
解决方案:
引用20楼CityBird的回复:

Quote: 引用19楼zhaogao333的回复:
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?

whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇

引用20楼CityBird的回复:

Quote: 引用19楼zhaogao333的回复:
感覺救你明白我的意思了,但是我沒有明白你說的,為什麼這麼差就不會漏掉了?

whereht_admin_grouplike'%,1,%'查询的是ht_admin_group字段内容包含",1,"的记录,而1,10,101,110只有"1,"而10,110,101,1只有",1",显然用whereht_admin_grouplike'%,1,%'查会漏掉这样的记录','+ht_admin_group+','作用是给ht_admin_group字段所有记录前后各添加一个",",相当于先把1,10,101,110变成,1,10,101,110,10,110,101,1变成,10,110,101,1,10,1,110,101变成,10,1,110,101,然后再like'%,1,%自然就不会漏了哇

明白了,謝謝你了

时间: 2024-08-07 13:12:50

這樣的SQL拼接語句是怎麼回事?的相关文章

如何得到sqlcommandbuilder﹐sqldataadpter自動產生的updatecommand,deletecommand,insertcommand的完整sql語句。

问题描述 如何得到sqlcommandbuilder﹐sqldataadpter自動產生的updatecommand,deletecommand,insertcommand的完整sql語句. 解决方案 解决方案二:up解决方案三:SqlConnectionconnection=newSqlConnection(connectionString);SqlDataAdapteradapter=newSqlDataAdapter();adapter.SelectCommand=newSqlComman

java 條件運算符替代不了if else語句

问题描述 java 條件運算符替代不了if else語句 使用if else語句可行,條件運算符則展示"類型不匹配" 求解 .. 解决方案 ?:是表达式, 你可以写 String msg = a.equals(b) ? "字符"+a+"是回文数" : "字符"+a+"不是回文数"; System.out.println(msg); 解决方案二: 本文主要内容如下: 1.从java字节码的角度去看if-els

mysql-下面sql建表语句哪里错了? 有错误提示

问题描述 下面sql建表语句哪里错了? 有错误提示 create table salary( salaryId int identity(1,1), employeeId char(100), employeeName char(100), year char(100), month char(100), basicWage float, overtimeWage float, trafficWage float, totalWage float, kaoqinReduce float, sec

請問要如何產生出這樣的數字排列

问题描述 for (i = 1; i <= 4; i++){var a = i+1 ;var b = i+2 ;var c = i+3 ;document.write(a);document.write(b);document.write(c);輸出// 234輸出// 345輸出// 456輸出// 567}這個是我目前這樣寫成固定的方法要如何寫成變數的方式呢?var x = 4;for (i = 1; i <= x; i++){//想不出來輸出// 234輸出// 345輸出// 456輸

常用SQL語句2

 根据SID找ORACLE的某个进程:SQL> SELECT PRO.SPID FROM V$SESSION SES,V$PROCESS PRO WHERE SES.SID=21 AND SES.PADDR=PRO.ADDR; 监控当前数据库谁在运行什么SQL语句:SQL>SELECT OSUSER, USERNAME, SQL_TEXT FROM V$SESSION A, V$SQLTEXT B WHERE A.SQL_ADDRESS =B.ADDRESS ORDER BY ADDRESS,

常用SQL語句3

 23.查询表空间使用情况:SELECT A.TABLESPACE_NAME "空间名称", 100-ROUND((NVL(B.BYTES_FREE,0)/A.BYTES_ALLOC)*100,2) "占用率(%)", ROUND(A.BYTES_ALLOC/1024/1024,2) "容量(M)",ROUND(NVL(B.BYTES_FREE,0)/1024/1024,2) 空闲(M)",ROUND((A.BYTES_ALLOC-NV

常用SQL語句

查看表空间的名称及大小:   SQL> SELECT T.TABLESPACE_NAME, ROUND(SUM(BYTES/(1024 * 1024)), 0) TS_SIZE FROM DBA_TABLESPACES T, DBA_DATA_FILES D WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME GROUP BY T.TABLESPACE_NAME; 查看表空间物理文件的名称及大小: SQL> SELECT TABLESPACE_NAME,FI

常用SQL語句4

 46.造成等待的LOCK的信息,比如LOCK类型等:COL EVENT FORMAT A30 SET LINE 160 COL MACHINE FORMAT A10 COL USERNAME FORMAT A15 SELECT B.SID,B.SERIAL#,B.USERNAME,MACHINE,EVENT,WAIT_TIME,CHR(BITAND(P1,-16777216)/16777215)||CHR(BITAND(P1, 16711680)/65535) "ENQUEUE TYPE&qu

web 程序出現以下錯誤,從錯誤來看是sqlce出錯,可是把SQL語句執行后并沒有出錯

问题描述 失敗的應用程式名稱:w3wp.exe,版本:7.5.7601.17514,時間戳記:0x4ce7a5f8失敗的模組名稱:sqlceme40.dll,版本:4.0.8876.1,時間戳記:0x4fcd14b9例外狀況碼:0xc0000005錯誤位移:0x000057be失敗的處理程序識別碼:0x139c失敗的應用程式開始時間:0x01d18f0f07873327失敗的應用程式路徑:c:windowssystem32inetsrvw3wp.exe失敗的模組路徑:C:ProgramFiles