AND cast(字段名 as int) BETWEEN 1 AND 10 AND convert(int , 字段名 ) BETWEEN 1 AND 10
convert(int,字段名 ) between 1 and 10
cast (1 as varchar(10))
AND cast(字段名 as int) BETWEEN 1 AND 10 where 1=1 这是为什么?
不好意思,可能我提的问题有点不清楚。假如数据库里的那个字段是字符型的,当sql语句是 WHERE 1=1 AND '字段段名' BETWEEN ‘1’ AND ‘10’ 数据库里的数据没有这些值的,但是都查出来了,这是为什么啊?
你写的查询条件1=1必然成立,而BETWEEN ‘1’ AND ‘10’本应是数值间的条件,而现在成了字符的ASCII值,条件含糊不清,但也是有符合条件的数据存在,所以你说都查出来了。
不要1=1也是那样效果。假如数据库里有'0401001','0401002','0401003','0401004','0401005','0401006','0401007','0401008','0401009' 条件是 BETWEEN ‘1’ AND ‘10’结果会全部查出,这是为什么?
转换成ASCII试试 --创建表 CREATE TABLE t( Id INT, TC NVARCHAR(64) )--start text INSERT INTO t SELECT '1','a' UNION ALL SELECT '2','m'SELECT * FROM t WHERE cast(ASCII(tc) as int) BETWEEN 97 AND 109
AND convert(int , 字段名 ) BETWEEN 1 AND 10
where 1=1 这是为什么?
--创建表
CREATE TABLE t(
Id INT,
TC NVARCHAR(64)
)--start text
INSERT INTO t
SELECT '1','a'
UNION ALL
SELECT '2','m'SELECT * FROM t WHERE cast(ASCII(tc) as int) BETWEEN 97 AND 109