有一语句
select field from #t where field between 1 and 10000其中field为varchar类型,值为5000
用上面的SQL语句查询结果查不到值
而用
select field from #t where field between 1 and 9999
确可以到得查询结果请问这什么原因,如何解决

解决方案 »

  1.   

    select field from #t where cast(field  as int) between 1 and 10000 
      

  2.   


    为什么查不出来?
    create table #m(a varchar(20))
    insert into #m
    select '5000'select * from #m where a between 1 and 10000
      

  3.   

    DECLARE @T TABLE(FILED VARCHAR(5000))
    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
    */
      

  4.   

    看以查
    肯能是varchar改为nvarchar的问题
      

  5.   

    有一语句 
    select field from #t where field between '1' and '10000' 其中field为varchar类型,值为5000 
    用上面的SQL语句查询结果查不到值 
    而用 
    select field from #t where field between '1' and '9999' 发错了,在是在要求有单引号的情况下查不到
      

  6.   

    DECLARE @T TABLE(FILED VARCHAR(5000))
    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'*/
      

  7.   


    field是以字符比较的,比较时以第一个字符开始比较,所以查不到数据是正确的
    你可以测试一下,比如:
    declare @s1 varchar(100),@s2 varchar(100)
    select @s1='100',@s2='5'
    if @s1>@s2
    print 'AAAAAAAA'
    else
        print 'BBBBBBBB'--结果
    /*
    BBBBBBBB
    */
      

  8.   

    DECLARE @T TABLE(FILED VARCHAR(5000))
    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*/
      

  9.   

    如果是你說的這樣的話,那麽你的條件是有問題的,因該寫成:
    select field from #t where field between '00001' and '10000'
    因爲是字符型數據,'2'也比'10000'要大,它們是從首字符開始比較大小然後比較後面的。
    不知這麽說是否明白。