我应该如何编写此查询以使用nvarchar数据类型过滤列并且具有' 00'值

时间:2017-02-28 19:24:25

标签: sql sql-server-2008

带有SECTION nvarchar列的表-A,其中包含以下数据示例:

SECTION
00
01
100
101
110
1000
1001
1234
2000
2001
2002

尝试使用演员:

SELECT
CAST(SECTION as int) as b,
FROM a
WHERE
SECTION Between 1001 and 2001

我得到"转换nvarchar值时转换失败' OO'到数据类型int。"

与''在哪里声明:

SELECT
CAST(SECTION as int) as b,
FROM a
WHERE
SECTION Between '1001' and '2001'

我得到的结果包括110

我该怎么写这个,所以我得到以下结果:

1001
1234
2000
2001

2 个答案:

答案 0 :(得分:0)

以下是标准SQL,可能适用于数据示例的大多数数据库:

SELECT CAST(SECTION as int) as b
FROM a
WHERE SECTION LIKE '1____';

答案 1 :(得分:0)

似乎值00(零零)实际上是O(字母“O”)。因为如果您在SECTION列中输入了所有整数,则下面的示例中提到的查询将返回正确的结果。

SELECT
CAST(SECTION as int) as b,
FROM a
WHERE
SECTION Between 1001 and 2001

对于您的第二个查询,如果您按照分部列的记录订购,结果将如下所示

select * from a order by SECTION    
    Result :- 
    SECTION
    00
    01
    100
    1000
    1001
    101
    110
    1234
    2000
    2001
    2002

对于第二个查询,将返回从1001到2001的值,因为SECTION是一个nvarchar列,因此它将按字母顺序获取数据。