有一语句
select field from #t where field between 1 and 10000其中field为varchar类型,值为5000
用上面的SQL语句查询结果查不到值
而用
select field from #t where field between 1 and 9999
确可以到得查询结果请问这什么原因,如何解决
select field from #t where field between 1 and 10000其中field为varchar类型,值为5000
用上面的SQL语句查询结果查不到值
而用
select field from #t where field between 1 and 9999
确可以到得查询结果请问这什么原因,如何解决
解决方案 »
- 关于删除表里的重复字段的问题,急!!!!!!!!!!
- [求助] 某个字段的检索值是不定的,sql语句怎么写?
- sql split查询
- 我接手别人的程序,维护中遇到个问题,请大家指教,是插入纪录报错!~~~急!~~~
- 一个看起来简单的问题,把握搞得焦头烂额!求高手帮忙,感激不尽
- MS SQL Server 2005 镜像无法联通,急需各位大侠帮忙!!!!!急!!!!!!!!!!!
- 字符插入
- 后天我要去家软件公司面试,他们告诉我还要先笔试,请问如果是数据库方面笔试的内容一般是什么呀?谢谢!
- 间隔时间
- 请问怎么在sql server 中存cad图像??做毕业设计急!!谢谢
- 自定义SQL函数,不是可以识别的 内置函数名称。
- 新手求助..笛卡尔积的问题
为什么查不出来?
create table #m(a varchar(20))
insert into #m
select '5000'select * from #m where a between 1 and 10000
INSERT @T SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5
SELECT * FROM @T WHERE FILED BETWEEN 1 AND 10000
--可以查詢的到阿
/*FILED
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
2
3
4
5
*/
肯能是varchar改为nvarchar的问题
select field from #t where field between '1' and '10000' 其中field为varchar类型,值为5000
用上面的SQL语句查询结果查不到值
而用
select field from #t where field between '1' and '9999' 发错了,在是在要求有单引号的情况下查不到
INSERT @T SELECT '''1''' UNION ALL
SELECT '''2''' UNION ALL
SELECT '''3''' UNION ALL
SELECT '''4''' UNION ALL
SELECT '''5'''
SELECT * FROM @T WHERE REPLACE(FILED,'''','') BETWEEN 1 AND 10000
/*FILED
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'1'
'2'
'3'
'4'
'5'*/
field是以字符比较的,比较时以第一个字符开始比较,所以查不到数据是正确的
你可以测试一下,比如:
declare @s1 varchar(100),@s2 varchar(100)
select @s1='100',@s2='5'
if @s1>@s2
print 'AAAAAAAA'
else
print 'BBBBBBBB'--结果
/*
BBBBBBBB
*/
INSERT @T SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 50000
SELECT * FROM @T WHERE FILED BETWEEN '1' AND '110000'
SELECT * FROM @T WHERE FILED BETWEEN '1' AND '6'
--FILED是字符,比較的時候只取第一位比較即'1',看結果/*FILED
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1FILED
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
2
3
4
50000*/
select field from #t where field between '00001' and '10000'
因爲是字符型數據,'2'也比'10000'要大,它們是從首字符開始比較大小然後比較後面的。
不知這麽說是否明白。