按编号排序引起的问题

lion10101 2014-08-15 03:11:15
有这个一个进货单表,表中字段如下:编号,供货商号,进货日期,业务员,制单人,库管员,税价合计,不含税价,税额,发票号
我查询后用 order by 进货单.编号asc
发现排序有如下 问题:
编号:
1
11
12
2
21
22
也就是个位数排序和两位数混在一起了。于是我想用0补齐,把编号整理成 0001,0002,……0011,0012…… 但是.net 中这条语句报错:
insert 进货单 (编号,供货商号,进货日期,业务员,制单人,库管员,税价合计,不含税价,税额,发票号) values ('right('0000000000'+cast(89 as varchar),10)','1003','2014/8/14','cgb','sys','cgb','20.00','0.00','0.00','444')

消息 102,级别 15,状态 1,第 1 行
'0000000000' 附近有语法错误。
大神们是怎么解决这种排序问题的?我的sql语句哪错了?谢谢.
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-08-15
  • 打赏
  • 举报
回复
ORDER BY Convert(int,编号)
lion10101 2014-08-15
  • 打赏
  • 举报
回复
我暂时就采用你的方法,把编号改为int,这样的确排序没问题了,结贴后给分 但是服务器上数据库不是我能动的,如果编号还是char,该如何处理
引用 3 楼 Tiger_Zhao 的回复:
编号是纯数字,字段就用 int 类型。
lion10101 2014-08-15
  • 打赏
  • 举报
回复
? 请版主明示,设计数据库时把编号设计成了char(14)
引用 2 楼 fredrickhu 的回复:
这里应该需要转义了 用两个引号代替一个试试。
lion10101 2014-08-15
  • 打赏
  • 举报
回复
这样在sql中的编号就成了'0000000089'……'0000000099'
引用 4 楼 chz415767975 的回复:
try
insert 进货单 (编号,供货商号,进货日期,业务员,制单人,库管员,税价合计,不含税价,税额,发票号) values (  Quotename(right('0000000000'+cast(89 as varchar),10),''''),'1003','2014/8/14','cgb','sys','cgb','20.00','0.00','0.00','444')
shoppo0505 2014-08-15
  • 打赏
  • 举报
回复
不用cast,直接values (right('0000000000'+编号,10) ,....
霜寒月冷 2014-08-15
  • 打赏
  • 举报
回复
try
insert 进货单 (编号,供货商号,进货日期,业务员,制单人,库管员,税价合计,不含税价,税额,发票号) values (  Quotename(right('0000000000'+cast(89 as varchar),10),''''),'1003','2014/8/14','cgb','sys','cgb','20.00','0.00','0.00','444')
Tiger_Zhao 2014-08-15
  • 打赏
  • 举报
回复
编号是纯数字,字段就用 int 类型。
--小F-- 2014-08-15
  • 打赏
  • 举报
回复
这里应该需要转义了 用两个引号代替一个试试。
哥眼神纯洁不 2014-08-15
  • 打赏
  • 举报
回复
right前面的引号不对吧

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧