太棒了。一切看起来都不错,但SQL Server为varchar
比较返回了错误的结果。
以下是我通过的命令,但每个命令的结果都是矛盾的。
很抱歉给您带来不便。堆栈溢出不允许我添加图像。
select * from book_loans
select max(loan_no) as max_number from book_loans
select * from book_loans where loan_no = '12'
以下是表格和结果:
book_loans (first query result):
loan_no book_id branch_id card_no date_out due_date date_in
1 0399147020 1 9019 2013-11-22 2013-12-06 2013-12-01
10 0192860925 4 9009 2014-04-18 2014-05-02 NULL
11 0805057579 1 9021 2014-04-18 2014-05-02 NULL
12 0911625607 2 9018 2014-04-19 2014-05-03 NULL
2 0030059380 4 9007 2013-12-01 2013-12-15 2013-12-16
3 0671880756 5 9018 2013-12-08 2013-12-22 2013-12-22
4 0911625291 3 9013 2014-01-02 2014-01-16 2014-01-12
5 0688161995 5 9022 2014-02-10 2014-02-24 2014-03-01
6 0911625291 2 9011 2014-03-03 2014-03-17 2014-03-16
7 1861003730 3 9034 2014-04-17 2014-05-01 NULL
8 0201612585 3 9034 2014-04-17 2014-05-01 NULL
9 1565927699 3 9034 2014-04-17 2014-05-01 NULL
第二个查询结果:
max_number
9
第三个查询结果:
result is empty
答案 0 :(得分:0)
因为您将其存储为varchar
。可以在值之前存储empty space
。所以像其他人说的那样你需要转换为int然后进行比较或聚合你想要的东西。
检查这个
CREATE TABLE #t
(a VARCHAR(10))
INSERT INTO #t
VALUES (' 12')
SELECT *
FROM #t
WHERE a = '12'
此处不会返回任何行。
SELECT *
FROM #t
WHERE convert(int,a) = '12'
此处将返回1行。
因此,如果一个字段将保存一个数值,那么它应该始终是数字类型(int,bigint,numeric,decial等等。)